他のクラスの関数を呼ぶコードがコンパイルエラーになる – プログラミング – Home

他のクラスの関数を呼ぶコードがコンパイ...
 
通知
すべてクリア

[解決済] 他のクラスの関数を呼ぶコードがコンパイルエラーになる


hoge
 hoge
(@hoge)
ゲスト
結合: 23年前
投稿: 13
Topic starter  

あるクラスから、他のクラスにある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(); <- コンパイルエラーが出る
}
    ・
    ・


引用未解決
トピックタグ
通りすがり
 通りすがり
(@通りすがり)
ゲスト
結合: 24年前
投稿: 92
 

B::hoge();
の形は静的関数の呼び出し方です。

静的じゃない関数の呼び出し方。
BOOL A::hoge(){
 B b;
b.hoge();
}

あと、クラス定義の終わりはセミコロンがいりますよ。
class A {
// ...
};


返信引用
rin
 rin
(@rin)
ゲスト
結合: 18年前
投稿: 112
 

コンパイルエラーC2352がでてると思いますが
「C2352」でMSDNを調べるとピンポイントで答えが出るかと

>B::hoge(); <- コンパイルエラーが出る
この方法で呼び出したいなら、static で


返信引用
ん?
 ん?
(@ん?)
ゲスト
結合: 17年前
投稿: 25
 

ttp://www.geocities.jp/ky_webid/cpp/language/019.html
内の「○静的メンバ関数」を参照して下さい。


返信引用
maru
 maru
(@maru)
ゲスト
結合: 17年前
投稿: 358
 

もしかして
class TWin {
public:
virtual BOOL hoge();
};
class TListDlg : public TWin {
public:
virtual BOOL hoge();
};
だったりして。

それで、実は本当にやるべきことは
BOOL A::hoge(){
 TWin::hoge();
}
だとか。

class Aとclass Bのサブクラスであれば、静的関数でなくても呼び出しは可能です。


返信引用
maru
 maru
(@maru)
ゲスト
結合: 17年前
投稿: 358
 

おっとっと
> class Aとclass Bのサブクラスであれば、
class Aがclass Bのサブクラスであれば、


返信引用
hoge
 hoge
(@hoge)
ゲスト
結合: 23年前
投稿: 13
Topic starter  

BOOL A::hoge(){
 B b;
b.hoge();
}

でコンパイルできました。

 他に指摘があったクラスの後の「}」に「;」を
付けるのは、書込みミスでした。
 ソースには書いていました。

初心者のため「静的でない関数~」とうエラーの意味が
よく判りませんでした。

皆さん、有難うございました。


返信引用
あー
 あー
(@あー)
ゲスト
結合: 17年前
投稿: 18
 

見りゃわかるのでいちいち初心者のためって注釈はいらないんじゃないかな


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました