我的 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.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 ;
};