gpt4 book ai didi

c++ - 尝试与 Base 中的 Derived 函数成为 friend - 为什么它不起作用?

转载 作者:行者123 更新时间:2023-11-30 05:42:10 26 4
gpt4 key购买 nike

我的第一篇文章在这里。我有两个类 - Base 和 Derived(从 Base 公开派生)。在 Derived 中,我有一个函数 printAsFriend。编译器对此不满意。为什么?其他类中的方法可以成为 friend 。为什么它不适用于派生类?如果我删除继承,它就可以正常工作。

这有效-

#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: error: invalid use of incomplete type ‘class YourClass’ friend void YourClass::printAsFriend(MyClass m); ^ refFile.c:3:8: error: forward declaration of ‘class YourClass’ class YourClass; ^ refFile.c: In member function ‘void YourClass::printAsFriend(MyClass)’: refFile.c:5:16: error: ‘int MyClass::i’ is private private: int i; ^ refFile.c:16:14: error: within this context { cout << m.i; } ^

为什么这行不通?我错过了什么?是否不允许与派生类的函数成为 friend ?

最佳答案

这与函数的好友关系无关,这是因为您不能引用您仅转发声明的类的成员。

在你的第二个片段中,当时 MyClass 被定义 YourClass 只是向前声明 - 编译器还没有看到它的定义,所以没有'知道成员函数 printAsFriend 甚至存在。

关于c++ - 尝试与 Base 中的 Derived 函数成为 friend - 为什么它不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30775279/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com