我的第一篇文章在这里。我有两个类-Base和Derived(从Base公开派生)。在派生中,我有一个函数printAsFriend。编译器对此不满意。为什么?其他类中的方法可以成为朋友。为什么它不适用于派生类?如果删除继承,它可以正常工作。
这有效-
#include <iostream>
using namespace std;
class MyClass;
class YourClass{
public:
YourClass(){}
void printAsFriend(MyClass m);
};
class MyClass{
private: int i;
public:
MyClass(){}
friend void YourClass::printAsFriend(MyClass m);
};
void YourClass::printAsFriend(MyClass m)
{ cout << m.i; }
int main(){
return 0;
}
但这不是-
#include <iostream>
using namespace std;
class YourClass;
class MyClass{
private: int i;
public:
MyClass(){}
friend void YourClass::printAsFriend(MyClass m);
};
class YourClass:public MyClass{
public:
YourClass():MyClass(){}
void printAsFriend(MyClass m);
};
void YourClass::printAsFriend(MyClass m)
{ cout << m.i; }
int main(){
return 0;
}
我收到以下错误:
refFile.c:8:49:错误:无效使用不完整类型'class YourClass'的朋友void YourClass :: printAsFriend(MyClass m); ^ refFile.c:3:8:错误:“ class YourClass”类YourClass的前向声明;^ refFile.c:在成员函数'void YourClass :: printAsFriend(MyClass)'中:refFile.c:5:16:错误:'int MyClass :: i'是private private:int i; ^ refFile.c:16:14:错误:在此上下文内{cout << mi; } ^
为什么不起作用?我想念什么?不允许与派生类的函数成为朋友吗?
与函数友好无关,因为您不能引用仅向前声明的类的成员。
在您的第二个代码段中,MyClass
定义的时间YourClass
仅被预先声明了-编译器尚未看到其定义,因此printAsFriend
甚至不知道成员函数的存在。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句