试图与Derived in Base的功能成为朋友-为什么它不起作用?

鲁特维克·卡夫(Rutvik Karve)

我的第一篇文章在这里。我有两个类-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; } ^

为什么不起作用?我想念什么?不允许与派生类的函数成为朋友吗?

乔纳森·波特(Jonathan Potter)

与函数友好无关,因为您不能引用仅向前声明的类的成员。

在您的第二个代码段中,MyClass定义的时间YourClass仅被预先声明了-编译器尚未看到其定义,因此printAsFriend甚至不知道成员函数的存在。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我的Javascript修剪功能不起作用?

来自分类Dev

为什么此相交功能不起作用?

来自分类Dev

为什么枚举不能成为模板?

来自分类Dev

为什么openCV的convertto功能不起作用?

来自分类Dev

QMessageBox的功能测试...为什么不起作用?

来自分类Dev

为什么该功能不起作用?

来自分类Dev

使用`评价`功能。为什么不起作用?

来自分类Dev

为什么差异功能不起作用(openSCAD)?

来自分类Dev

为什么这个javascript装饰功能不起作用?

来自分类Dev

为什么PRIVATE成员函数不能成为另一个类的朋友函数?

来自分类Dev

为什么appcache的首选在线功能不起作用?

来自分类Dev

为什么Generators的next函数不能成为事件侦听器的回调函数

来自分类Dev

为什么对象不能成为Proc对象的参数类型

来自分类Dev

为什么我的数组功能不起作用?

来自分类Dev

为什么此Powershell功能更改目录不起作用?

来自分类Dev

为什么此功能不起作用?

来自分类Dev

为什么在tr内部定义的元素不能成为tbody的子代?

来自分类Dev

为什么我的自动填充功能不起作用?

来自分类Dev

为什么__repr__不能成为__init__中定义的属性?

来自分类Dev

试图允许lambda使用基于S3资源的策略访问S3,为什么它不起作用?

来自分类Dev

为什么功能代码不起作用

来自分类Dev

使功能成为列表理解

来自分类Dev

为什么int类型不能成为STL向量中的迭代器?

来自分类Dev

是什么使PC可以成为Web服务器,又使它不能成为Web服务器呢?

来自分类Dev

为什么它不起作用从MainActivity接收的SMSReceived中的导入功能?

来自分类Dev

为什么/ proc不能成为Linux上的覆盖文件系统(overlayfs)的一层?

来自分类Dev

为什么JavaScript中的对象不能成为其自身的原型?

来自分类Dev

我试图使日期简洁,但它不起作用

来自分类Dev

试图回显表,但它不起作用

Related 相关文章

  1. 1

    为什么我的Javascript修剪功能不起作用?

  2. 2

    为什么此相交功能不起作用?

  3. 3

    为什么枚举不能成为模板?

  4. 4

    为什么openCV的convertto功能不起作用?

  5. 5

    QMessageBox的功能测试...为什么不起作用?

  6. 6

    为什么该功能不起作用?

  7. 7

    使用`评价`功能。为什么不起作用?

  8. 8

    为什么差异功能不起作用(openSCAD)?

  9. 9

    为什么这个javascript装饰功能不起作用?

  10. 10

    为什么PRIVATE成员函数不能成为另一个类的朋友函数?

  11. 11

    为什么appcache的首选在线功能不起作用?

  12. 12

    为什么Generators的next函数不能成为事件侦听器的回调函数

  13. 13

    为什么对象不能成为Proc对象的参数类型

  14. 14

    为什么我的数组功能不起作用?

  15. 15

    为什么此Powershell功能更改目录不起作用?

  16. 16

    为什么此功能不起作用?

  17. 17

    为什么在tr内部定义的元素不能成为tbody的子代?

  18. 18

    为什么我的自动填充功能不起作用?

  19. 19

    为什么__repr__不能成为__init__中定义的属性?

  20. 20

    试图允许lambda使用基于S3资源的策略访问S3,为什么它不起作用?

  21. 21

    为什么功能代码不起作用

  22. 22

    使功能成为列表理解

  23. 23

    为什么int类型不能成为STL向量中的迭代器?

  24. 24

    是什么使PC可以成为Web服务器,又使它不能成为Web服务器呢?

  25. 25

    为什么它不起作用从MainActivity接收的SMSReceived中的导入功能?

  26. 26

    为什么/ proc不能成为Linux上的覆盖文件系统(overlayfs)的一层?

  27. 27

    为什么JavaScript中的对象不能成为其自身的原型?

  28. 28

    我试图使日期简洁,但它不起作用

  29. 29

    试图回显表,但它不起作用

热门标签

归档