1

这是我的代码的快捷方式:

//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 文件中,我在开头放置了“使用命名空间 ...”。

4

4 回答 4

2

您在 , 中的朋友声明myClass声明了一段toto::myRoutine时间,您的函数定义定义了::myRoutine. 在与解决您的问题myRoutine相同的命名空间中定义。myClass

于 2013-07-16T09:59:16.153 回答
1

myRoutine() 应该写在命名空间内,或者通过

namespace toto
{
// write the function here
}

或者

void *toto::myRoutine( //....
于 2013-07-16T10:05:36.347 回答
1

此外,myClass 是在命名空间中定义的,在 .cpp 文件中,我在开头放置了“使用命名空间...”。

不要那样做。在.cpp文件中,您必须在命名空间内定义函数,如下所示

namespace toto
{
  void* myRoutine(void* arg) { ...}
}

或者像这样

void* toto::myRoutine(void* arg)
于 2013-07-16T10:01:43.023 回答
-1

您可以在类中使用 get 方法,例如,

char* getname()
{
   return _name;
}

比调用 foo->getname()。

于 2013-07-16T09:46:02.363 回答