vaguely

和歌山に戻りました。ふらふらと色々なものに手を出す毎日。

C++でメソッド(関数)の呼び出し

あるクラス(ClassA)のメソッド(methodA)から別のメソッド(methodB)を呼び、 更にそのメソッドが別のクラス(ClassB)のメソッド(methodC)を呼んでいる場合。

【ClassA】
ClassB clsB;
int methodB (){
return clsB.methodC ();
}
void methodA (){
methodB ();
}

【ClassB】

class ClassB{
public:
int methodC (){
return 1;
}
};

上記のように記述すると(Xcodeの場合)Apple Mach-O Linker Errorが発生します。

呼び出し元であるmethodAから、別のクラスにあるmethodCが認識できないということのようです。

結果としては、methodCを以下のように変更してやることでエラーは発生しなくなりました。

int ClassB::methodC (){
return 1;
}

最初の書き方でも、methodCを呼ぶまでエラーは起きないのでややこしいですが、クラスのメンバ関数は [戻り値 クラス名::メソッド名()]とする必要がある、と。

なお、ヘッダファイルで上記メソッドに[クラス名::]を追加するとエラーになるため、実装ファイルでの記述と異なりますが、特に問題はないようです。