C++ コードで多くの問題が発生していますが、その理由がわかりません。
myclass.h と myclass.cpp を含む静的ライブラリ libmylib.a を開発しています。
私が抱えている問題は次のようなものです:
// myclass.h
class myClass{
public:
myclass();
myclass(a,b);
// some methods.
private:
int a ;
int b ;
};
myclass.cpp で、コンストラクター メソッドなどを定義すると、すべて正常に動作します。main.cpp コードでライブラリを使用できます。
次に、フレンド機能を追加しました。
// myclass.h
class myClass{
public:
myclass();
myclass(a,b);
friend void foo() ;
// some methods.
private:
int a ;
int b ;
};
このように myclass.cpp で foo 関数を定義します
// myclass.cpp
void foo(){
cout << "In foo function " ;
}
問題は、main.cpp で foo() を使用しようとすると、次のようなコンパイル エラーが発生することです。
//main.cpp
#include "myclass.h" // foo() is declared here!
foo() ;
main.cpp:62:6: エラー: 'foo' はこのスコープで宣言されていません
今、私は本当に問題がどこにあるのか理解できません。フレンド関数を追加した後、リンカが mylib を使用しなくなったように見えますが、その理由がわかりません。さらに、main.cpp myclass で foo() をコメントすると、myclass とそのメソッドを問題なく使用できるため、奇妙です。
私は何を間違っていますか?理解するのに2時間費やしましたが、本当に理解できません!!!
解決策:答えのアドバイスに従ってください:
// myclass.h
void foo() ; // the function has to be declared outside the class
class myClass{
public:
myclass();
myclass(a,b);
friend void foo() ; // but here you have to specify that
// is a friend of the class!
// some methods.
private:
int a ;
int b ;
};