我对指针很新,所以我不知道它们发生了什么。
我试图让一个大师类将一个自己的指针传递给它的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");
}
这是我的问题归结为其核心组件。
答案 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)
问题在于前瞻性声明。 您可以参考以下链接了解更多详情和解释。