我在同一行代码上出现两个错误。 以下是代码片段,只有相关的代码。
首先是数据库类
#include "program.h"
using namespace std;
class Database {
public:
Database(Program *program);
~Database();
};
接下来是查询类。
#include "database.h"
using namespace std;
class Query {
public:
Relation* evaluate(Database* database);
};
有问题的行是:
Relation* evaluate(Database* database);
"Database does not name a type"
。"expected ';' after member declaration"
,我认为与第一个错误有关。在添加此数据库类之前,该项目中的所有内容都有效。
我对此感到困惑,并且一直在研究整个stackoverflow都没有用。 我在Debian Stretch上并使用g ++进行编译。有人有什么想法吗?
编辑
最低可编译代码:
query.h
#include "database.h"
class Query {
public:
void evaluate(Database* database);
};
program.h
#include "query.h"
#include "database.h"
using namespace std;
class Program {
public:
};
database.h
#include "program.h"
class Database {
public:
Database(Program *program);
};
答案 0 :(得分:0)
您可能想尝试编译器的-E
选项:它会导致对源代码进行预处理,即,您将看到编译器看到的代码。如果仔细查看标头,您会发现不同类型之间存在循环依赖关系。您需要打破它们。
“简单”的解决方法是在Database
中声明query.h
类:
class Database;
class Query {
public:
void evaluate(Database* database);
};
虽然这将解决显示的问题,但循环依赖会出现并困扰您。一般来说,它们是不好的。一个周期性地相互依赖的类系统实际上只是一个组件,可能应该全部在一个标头中声明。