C ++期望';'在成员声明的末尾,如果有一个

时间:2018-11-05 23:13:48

标签: c++ g++

我在同一行代码上出现两个错误。 以下是代码片段,只有相关的代码。

首先是数据库类

#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);
  1. 尽管包含database.h文件,第一个错误是"Database does not name a type"
  2. 第二个错误是"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);
};

1 个答案:

答案 0 :(得分:0)

您可能想尝试编译器的-E选项:它会导致对源代码进行预处理,即,您将看到编译器看到的代码。如果仔细查看标头,您会发现不同类型之间存在循环依赖关系。您需要打破它们。

“简单”的解决方法是在Database中声明query.h类:

class Database;

class Query {
public:
    void evaluate(Database* database);
};

虽然这将解决显示的问题,但循环依赖会出现并困扰您。一般来说,它们是不好的。一个周期性地相互依赖的类系统实际上只是一个组件,可能应该全部在一个标头中声明。