我對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 ;
};
我定義foo的功能myclass.cpp這樣
// myclass.cpp
void foo(){
cout << "In foo function " ;
}
的問題是,如果我嘗試在主要使用FOO()的.cpp我得到,指出編譯錯誤:
//main.cpp
#include "myclass.h" // foo() is declared here!
foo() ;
main.cpp:62:6: error: ‘foo’ was not declared in this scope
現在我真的不明白問題在哪裏。 我注意到,添加好友功能後,似乎鏈接器不再使用mylib了,但我不明白爲什麼。此外,這很奇怪,因爲如果我在main.cpp myclass中註釋foo()並且它的方法可以毫無問題地使用。
我在做什麼錯?我花了兩個小時試圖弄清楚,但真的不明白!
解決方案:按照答案的建議:
// 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 ;
};
您是否已經聲明瞭'foo()'函數?或者在調用點之前定義了'foo()'函數? – Mahesh
是的,我有。這是在myclass.h – lucacerone
@LucaCerone是否在課外宣佈**?或者只是作爲朋友? –