在另一个类内部构造一个类(非静态成员引用必须相对于特定对象)



我有一个类A,它的成员变量是指向类B的指针向量。类B只在A中使用,所以我决定在A中定义它。B的构造函数使用了一个在 a 构造函数内部计算的变量,我们称其为c

问题是,在 a.p 当我写:

A::B::B(...)
{
foo(c);
}

它给了我错误:非静态成员引用必须相对于特定对象

我尝试了A::c而不是c,但这并没有解决问题。我想要的是,有一种方法可以让B从a继承变量而不是它的子变量,如果这有意义的话。不管怎样,用广义的"this"或类似的东西来完成它?

B无法知道您指的是哪个c。您可以通过在构造b时传递一个指向this的指针来轻松地使它像这样工作。

class A {
    class B {
        B(A * owner) : 
        owner(owner) {}
        void doSomething() {
            int d = owner->c;
        }
    private:
        A * owner;
    };
    A() :
    bInstance(this) {}
    int c; 
private:
    B bInstance;
};

我不认为语言中有任何内置的东西可以解决你的问题。

最新更新