我有这个简单的代码,其中两个内部类相互依赖。我无法在 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/