【发布时间】:2015-08-26 19:45:31
【问题描述】:
我在这里的第一篇文章。我有两个类 - Base 和 Derived(从 Base 公开派生)。在 Derived 中,我有一个函数 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: int i; ^ refFile.c:16:14: 错误:在此上下文中 { cout
为什么这不起作用?我错过了什么?不能和你的派生类的函数交友吗?
【问题讨论】:
标签: c++ inheritance friend forward-declaration friend-function