以下是我的代码的快捷方式:
//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”。我绝对需要函数签名,因为它被用作线程例程。而且我想避免将我的属性更改为公开..
如果有人可以帮助我,谢谢!
编辑:此外,myClass是在命名空间中定义的,而在.cpp文件中,我在开头放了一个“using namespace ...”。
答案 0 :(得分:2)
myClass
中的朋友声明,在您的函数定义定义toto::myRoutine
时声明::myRoutine
。在与myRoutine
相同的命名空间中定义myClass
以解决您的问题。
答案 1 :(得分:1)
此外,myClass是在命名空间中定义的,而在.cpp文件中,我在开头放了一个“using namespace ...”。
不要那样做。在.cpp
文件中,您必须在命名空间内定义函数,如此
namespace toto
{
void* myRoutine(void* arg) { ...}
}
或者像这样
void* toto::myRoutine(void* arg)
答案 2 :(得分:1)
myRoutine()应该通过
写入命名空间namespace toto
{
// write the function here
}
或
void *toto::myRoutine( //....
答案 3 :(得分:-1)
您可以在类中使用get方法,
char* getname()
{
return _name;
}
调用foo-&gt; getname()。