友元类访问私有成员函数的有关问题
友元类访问私有成员函数的问题
在下把一个类声明成另外一个类的友元类,但是当这个友元类访问那个类的私有成员函数时候,却出现了下面的问题:
Test error LNK2019: 无法解析的外部符号 "private: unsigned short __thiscall CElement::GetLength(void) " (?GetLength@CElement@@AAEGXZ) ,该符号在函数 "public: void __thiscall CWave::ReadElement(class CElement *) " (?ReadElement@CWave@@QAEXPAVCElement@@@Z) 中被引用
其中CWave类已经在CElement类中声明为其友元类,程序中访问CElement类的私有数据成员没有问题,但访问私有成员函数时候编译就出现了上面的错误。
请大家指教,谢谢!
------解决方案--------------------
访问控制是编译时进行的,编译既然通过就说明不是友元不友元的问题了
检查下你的CElement::GetLength(void)是不是没有实现体
------解决方案--------------------
这个不是编译错误,是链接错误
我想到了一个问题,你不会是把inline函数的实现体放在cpp文件里的吧?
------解决方案--------------------
呵呵,算暂时解决了...
但是还是很奇怪,按理说非inline函数不要求在声明时定义的啊
------解决方案--------------------
如果楼主用的VC6的编译器的话, 就是VC6的BUG, 有些人通过打SP5或SP6的补丁可以解决问题, 但在我的机器上不行(奇怪)
我的解决办法是进行前置声明.
------解决方案--------------------
奇怪的错误,误打误撞的解答
在下把一个类声明成另外一个类的友元类,但是当这个友元类访问那个类的私有成员函数时候,却出现了下面的问题:
Test error LNK2019: 无法解析的外部符号 "private: unsigned short __thiscall CElement::GetLength(void) " (?GetLength@CElement@@AAEGXZ) ,该符号在函数 "public: void __thiscall CWave::ReadElement(class CElement *) " (?ReadElement@CWave@@QAEXPAVCElement@@@Z) 中被引用
其中CWave类已经在CElement类中声明为其友元类,程序中访问CElement类的私有数据成员没有问题,但访问私有成员函数时候编译就出现了上面的错误。
请大家指教,谢谢!
------解决方案--------------------
访问控制是编译时进行的,编译既然通过就说明不是友元不友元的问题了
检查下你的CElement::GetLength(void)是不是没有实现体
------解决方案--------------------
这个不是编译错误,是链接错误
我想到了一个问题,你不会是把inline函数的实现体放在cpp文件里的吧?
------解决方案--------------------
呵呵,算暂时解决了...
但是还是很奇怪,按理说非inline函数不要求在声明时定义的啊
------解决方案--------------------
如果楼主用的VC6的编译器的话, 就是VC6的BUG, 有些人通过打SP5或SP6的补丁可以解决问题, 但在我的机器上不行(奇怪)
我的解决办法是进行前置声明.
------解决方案--------------------
奇怪的错误,误打误撞的解答