C ++:将master的指针传递给worker

时间:2018-06-14 05:40:37

标签: c++ pointers

我对指针很新,所以我不知道它们发生了什么。

我试图让一个大师类将一个自己的指针传递给它的worker / s,我不知道它为什么不起作用。

#include <iostream>
#include <Windows.h>

using namespace std;

class BigOne {
public:
    LittleOne workers[1] = {LittleOne(this)};
    int increase = 0;
};

class LittleOne {
    BigOne* master;
public:
    LittleOne(BigOne*);
    void Increment();
};

LittleOne::LittleOne(BigOne* upOne) {
    master = upOne;
}

void LittleOne::Increment() {
    master->increase++;
}

BigOne Outer;

    int main() {
    cout << Outer.increase << endl;
    Outer.worker.Increment();
    cout << Outer.increase << endl;
    system("PAUSE");
}

这是我的问题归结为其核心组件。

2 个答案:

答案 0 :(得分:4)

问题不在于指针。它主要在这里:

class BigOne {
public:
    LittleOne workers[1] = {LittleOne(this)};
    int increase = 0;
};

定义workers时,LittleOne是什么?它是如何在记忆中展开的?它是如何初始化的?编译器无法知道,它还没有看到类定义。所以你必须翻转定义:

class BigOne;

class LittleOne {
    BigOne* master;
public:
    LittleOne(BigOne*);
    void Increment();
};

class BigOne {
public:
    LittleOne workers[1] = {LittleOne(this)};
    int increase = 0;
};

前向声明允许我们定义接受和返回指针的成员。因此,类LittleOne可以在BigOne之前编写其定义。现在,BigOne可以按值定义LittleOne类型的成员。

答案 1 :(得分:0)

问题在于前瞻性声明。 您可以参考以下链接了解更多详情和解释。

What are forward declarations in C++?