c++ - 非静态成员引用必须相对于特定对象?

标签 c++

我有这个简单的代码,其中两个内部类相互依赖。我无法在 functionC() 中调用对象的 functionB(),尽管如您所见,我已经创建了一个指向 ClassB 对象的指针甚至实例化了对象,但我仍然收到需要从对象调用函数的错误。我想知道我到底做错了什么?

#include <iostream>
class ClassA
{
public:
    ClassA() { object = new ClassB(); };
    ~ClassA();
    void functionA() {  };
private:
    class ClassB
    {
    public:
        void functionB() { std::cout << "Function B"; };
    };
    class ClassC
    {
    public:
        void functionC() {
            std::cout << "Fuction C";
            object->functionB();
        }; //Error here
    };
    ClassB* object;
    ClassC* object1;
};

最佳答案

C++ 根本不捕获其“父”实例,例如Java 可以。在嵌套的 ClassB 和 ClassC 中,您需要对 ClassA 的显式反向引用:

class ClassA {
public:
    ClassA() : object(new ClassB(*this)) {}
    ~ClassA() { delete this->object; }
private:
    class ClassB {
        classA &parent;
    public:
        ClassB(classA &parent) : parent(parent) {}
    };
    ClassB *object;
};

但是这里为什么要动态分配ClassB呢?这更容易阅读和理解,也更不容易出错:

class ClassA {
public:
    ClassA() : object(*this) {}
    ~ClassA() {}
private:
    class ClassB {
        classA &parent;
    public:
        ClassB(classA &parent) : parent(parent) {}
    };
    ClassB object;
};

关于c++ - 非静态成员引用必须相对于特定对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36749925/

相关文章:

c++ - cout 在无限循环的情况下不起作用

c++ - std::string 如何重载赋值运算符?

c++ - 如何在某些智能指针中实现深拷贝功能?

c++ - 在 Visual Studio 中编译时查找 C++ 平台目标

c++ - 在 C++ 中将整数输入写入 vector 容器

c++ - 基于两个 bool 变量的分支

c++ - 尝试初始化结构 vector 时出现编译错误

c++ - 我处理这个的方式有内存问题吗?

c++ - 在调试器中自动显示具有已知类型和长度的 void*(数组)

c++ std::string.find 在 boolean 表达式中返回意外结果