あるクラスから、他のクラスにあるPublic関数を呼び出すコード
を実装したところ、
「静的でないメンバ関数の中で呼び出しが正しくありません。」
というコンパイルエラーが出ます。
初心者のため、原因がわかりません。
どなたか教えて頂きたい。
[環境]
OS WinXP SP2
VC6
[コードの例]
ファイルは、test.h, A.cpp, B.cppの3本
test.hの内容
・
・
class A : public TListDlg {
public:
virtual BOOL hoge();
・
・
}
class B : public TWin {
public:
virtual BOOL hoge();
}
クラスAのhoge関数は、A.cppに実装、
クラスBのhoge関数は、B.cppに実装。
A.cppの関数hogeの実装部分に、クラスBの関数hogeを実行する
コードを入れると、そこで、上記のコンパイルエラーが出る。
ソースコード(A.cpp)の内容
・
・
BOOL A::hoge(){
B::hoge(); <- コンパイルエラーが出る
}
・
・
B::hoge();
の形は静的関数の呼び出し方です。
静的じゃない関数の呼び出し方。
BOOL A::hoge(){
B b;
b.hoge();
}
あと、クラス定義の終わりはセミコロンがいりますよ。
class A {
// ...
};
コンパイルエラーC2352がでてると思いますが
「C2352」でMSDNを調べるとピンポイントで答えが出るかと
>B::hoge(); <- コンパイルエラーが出る
この方法で呼び出したいなら、static で
ttp://www.geocities.jp/ky_webid/cpp/language/019.html
内の「○静的メンバ関数」を参照して下さい。
もしかして
class TWin {
public:
virtual BOOL hoge();
};
class TListDlg : public TWin {
public:
virtual BOOL hoge();
};
だったりして。
それで、実は本当にやるべきことは
BOOL A::hoge(){
TWin::hoge();
}
だとか。
class Aとclass Bのサブクラスであれば、静的関数でなくても呼び出しは可能です。
おっとっと
> class Aとclass Bのサブクラスであれば、
class Aがclass Bのサブクラスであれば、
BOOL A::hoge(){
B b;
b.hoge();
}
でコンパイルできました。
他に指摘があったクラスの後の「}」に「;」を
付けるのは、書込みミスでした。
ソースには書いていました。
初心者のため「静的でない関数~」とうエラーの意味が
よく判りませんでした。
皆さん、有難うございました。
見りゃわかるのでいちいち初心者のためって注釈はいらないんじゃないかな