定义包含指针的类

时间:2016-04-07 18:32:26

标签: c++ class pointers

我有一系列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而这也不起作用,我的问题是为什么编译器会抛出此错误以及我该怎么做才能解决它?

2 个答案:

答案 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