从成员结构的成员函数中访问类的成员?

时间:2016-05-23 02:13:54

标签: c++ initialization inner-classes

从以下代码:

#include <iostream>
#include <string>
using namespace std;

class A
{
    public:
    A() { name = "C++"; }
    void read();

    private:
    string name;
    struct B
    {
        char x, y;
        int z;
        void update();
    } m, n, o;
};

void A::B::update()
{
    cout << this->A::name;
}

void A::read()
{
    m.update();
}

int main() {
    A a;
    a.read();
    return 0;
}

编译时,收到以下错误:

prog.cpp: In member function 'void A::B::update()':
prog.cpp:23:19: error: 'A' is not a base of 'A::B'
  cout << this->A::name;

如何从成员结构的成员函数中打印A的name变量? (具体来自A::B::update()

1 个答案:

答案 0 :(得分:3)

Nested classes独立于封闭类。

  

但它是独立的,并且没有对封闭类的this指针的特殊访问权限。

所以你需要将一个封闭类的实例传递给它,或者让它拥有一个(作为成员)。

void A::B::update(A* pa)
{
    cout << pa->name;
}

void A::read()
{
    m.update(this);
}