这是我的代码的快捷方式:
//myClass.h
namespace toto
{
class myClass
{
friend void *myRoutine(void*);
private:
char* _name;
}
}
//myClass.cpp
using namespace toto;
void *myRoutine(void* arg)
{
myClass* foo = static_cast<myClass*>(arg);
if ( NULL != foo )
{
cout << foo->_name;
}
}
使用 GCC 编译时,出现错误“_name is private”。我绝对需要那个函数签名,因为它被用作线程例程。而且我想避免将我的属性更改为 public..
如果有人能帮助我,谢谢!
编辑:另外,myClass 是在命名空间中定义的,在 .cpp 文件中我在开头放置了“using namespace ...”。
最佳答案
您在 myClass
中的友元声明声明了一个 toto::myRoutine
,而您的函数定义则定义了一个 ::myRoutine
。在与 myClass
相同的命名空间中定义 myRoutine
以解决您的问题。
关于c++ - 友元函数返回 (void*) : cannot get implementation in . cpp 文件工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17673101/