Friend函数返回(void *):无法在.cpp文件中实现工作

时间:2013-07-16 09:40:47

标签: c++ gcc friend void-pointers

以下是我的代码的快捷方式:

//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 ...”。

4 个答案:

答案 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()。