C错误:’struct …的前向声明?

周期性包容问题

我转发声明另一个标题中的一个类,试图解决它们的周期性包含.这是我的两个文件:

第一个文件(Parameter.h):

#pragma once
#include "Token.h"`

class Expression;

class Parameter {
public:

    Parameter() {
        string = new Token();
        identifier = new Token();
        expr = new Expression();
    }

    Token* string;
    Token* identifier;
    Expression* expr;
};

第二个文件(Expression.h):

#pragma once
#include "Token.h"
#include "Parameter.h"

class Expression {
public:
    Expression() {
        param1 = new Parameter();
        param2 = new Parameter();
        op = new Token();
    }

    Expression(Parameter* p1, Token* o, Parameter* p2) {
        param1 = p1;
        param2 = p2;
        op = o;
    }

    Parameter* param1;
    Parameter* param2;
    Token* op;
};

如您所见,我在Parameter.h中转发声明Expression,但我仍然遇到以下两个错误:

forward declaration of ‘struct Expression’

invalid use of incomplete type ‘struct Expression’

我看了几个以前发过的问题,但仍然无法解决这个问题.谢谢.

最佳答案
您无法转发声明Expression,因为您需要完整的声明:

Parameter() {
    string = new Token();
    identifier = new Token();
    expr = new Expression();  // here!
}

你可以做的是将Parameter()构造函数的实现从头部移到.cpp文件中.

转载注明原文:C错误:’struct …的前向声明? - 代码日志