gpt4 book ai didi

c++ - 定义包含彼此指针的类

转载 作者:行者123 更新时间:2023-11-30 05:29:14 32 4
gpt4 key购买 nike

我有一系列 C++ 类,出于互连原因,它们包含相互指向的指针。代码如下:

class Cell;

//classes
class Connection {
public:
Cell * source;

virtual bool trigger() {
return source->trigger(); //line 16, source of the error
}

//constructors
//default
Connection() {
source = NULL;
}

//call
Connection(Cell * in) {
source = in;
}

//copy
Connection(const Connection & in) {
source = in.source;
}
};

class NotConnection : Connection {
public:
virtual bool trigger() override {
return !source->trigger();
}

//constructors
//default
NotConnection() {
source = NULL;
}

//call
NotConnection(Cell * in) {
source = in;
}

//copy
NotConnection(const NotConnection & in) {
source = in.source;
}
};


class Cell {
public:
vector<Connection *> parents;

virtual bool trigger() = 0;

~Cell() {
for (int i = 0; i < parents.size(); i++) {
delete parents[i];
}
}
};

我以为我可以使用前向声明来清除任何编译问题,但是当我尝试构建项目时,我得到了错误:

source.cpp(16): error C2027: use of undefined type 'Cell'

我尝试重新排序类并转而声明 Connection,但这也不起作用,我的问题是为什么编译器会抛出此错误,我该怎么做才能解决它?

最佳答案

您不能访问尚未定义的类的成员,因为编译器还不知道该类的成员集。

必须先声明trigger,然后在看到Cell的定义后定义它。

class Cell;

class Connection {
public:
Cell * source;
virtual bool trigger();
};

class Cell {
// definition of Cell
};

inline bool Connection::trigger() {
return source->trigger();
}

关于c++ - 定义包含彼此指针的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36484446/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com