循环包含问题
我转发声明其中一个类在另一个类的标题中,试图解决它们的循环包含问题。这是我的两个文件:
第一个文件(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/