C++ 错误 : forward declaration of 'struct. ..?

标签 c++ compiler-errors include cyclic-reference

循环包含问题

我转发声明其中一个类在另一个类的标题中,试图解决它们的循环包含问题。这是我的两个文件:

第一个文件(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 中转发声明表达式,但仍然出现以下两个错误:

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() 构造函数的实现从 header 中移到 .cpp 文件中。

关于C++ 错误 : forward declaration of 'struct. ..?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14991497/

相关文章:

java.lang.NoSuchFieldException

c++ - 在文件中间#include 是好习惯吗?

php - 包含在包含的文件中不起作用 PHP

grails - 克 :include vs g:render

C++将私有(private)类变量发送到函数中

c# - VS 2010 C# : Intellisense resolved library reference, 但编译器没有

c++ - 如何在包含指向元素的指针的集合中找到元素?

c++ - 错误到底是什么以及错误地为可 move 和不可复制成员调用复制构造函数有什么解决方法

c++ - 通过 C++ 中的新检查返回指针

c++ - 如果要执行 const_cast,为什么要将参数设置为 const?