我有一系列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
而这也不起作用,我的问题是为什么编译器会抛出此错误以及我该怎么做才能解决它?
答案 0 :(得分:1)
您无法访问尚未定义的类的成员,因为编译器尚不知道该类的成员集。
您必须先声明trigger
,然后在看到Cell
的定义后再定义它。
class Cell;
class Connection {
public:
Cell * source;
virtual bool trigger();
};
class Cell {
// definition of Cell
};
inline bool Connection::trigger() {
return source->trigger();
}
答案 1 :(得分:0)
在声明指针或对它们的引用时,可以使用前向声明的类,但实际上不能使用这些类型。
将connection::trigger()
实施移至.cpp
文件,或在定义inline
类后将其定义为cell
。