C ++如何在外部类中声明的内部类中使用变量

时间:2018-08-10 11:23:50

标签: c++

是否可以在Outer class中声明的内部类中使用变量。 我想实现以下目标。可能吗。 我收到以下错误。

prog.cc:在构造函数'Outer :: Inner :: Inner()'中:prog.cc:12:25:错误:无效地使用了非静态数据成员'Outer :: i'              内部(){i = 5; };

    #include <iostream>
using namespace std;
class Outer {
public:
    int i;
    class Inner; // forward declaration of Outer::Inner
    friend class Inner;
    class Inner {
        Inner() {
            i = 5;
        };
    };
};
int main() {
    return 0;
}

2 个答案:

答案 0 :(得分:6)

与Java不同,C ++“内部类”与创建它们的外部类没有任何关系。您将必须传递一个指向外部类的指针或引用。

答案 1 :(得分:1)

摘自在线提供的标准工作草案:

  

9.7嵌套类声明[class.nest]
  一个类可以在另一个类中声明。在另一个内部声明的类称为嵌套类。嵌套类的名称是其所在类的本地名称。嵌套类在其封闭类的范围内。

示例:

int x; 
int y;
struct enclose {  
    int x; 
    static int s;
    struct inner { 
        void f(int i) { 
            int a = sizeof(x); // OK: operand of sizeof is an unevaluated operand 
            x = i; // error: assign to enclose::x 
            s = i; // OK: assign to enclose::s 
            ::x = i; // OK: assign to global x 
            y = i; // OK: assign to global y 
        } 
        void g(enclose* p, int i) { 
            p->x = i; // OK: assign to enclose::x 
        } 
    };     
}; 
inner* p = 0; // error: inner not in scope 

从文档中提供的示例中可以看到,嵌套类访问封装类的非静态成员的唯一方法是通过指向封装类的指针。

这就是void g(enclose* p, int i)