在类中声明对象时可能导致此错误的原因是什么?

时间:2010-05-22 06:21:50

标签: c++ class oop objectinstantiation

我正在与这项任务作斗争:)

我有两个课程:海洋和网格。

当我在海洋中声明Grid的一个对象时:

unsigned int sharkCount;
Grid grid;

编译/抱怨说:

error C2146: syntax error : missing ';' before identifier 'grid'


你能用我提供的有限信息预测是什么产生了这个错误吗?

似乎海洋不喜欢Grid类。这可能是因为网格类的实施不佳。 BTW Grid有一个默认构造函数。

然而,错误发生在编译时间!。

编辑:他们每个都在单独的头文件中,我在Grid.h中包含了Grid.h。

3 个答案:

答案 0 :(得分:2)

我的第一个猜测是Grid的定义在您尝试在Ocean中使用时无法看到。通常情况下,如果您将每个文件放在自己的文件中,并且没有使用标题来允许每个文件被另一个“看到”,就会发生这种情况。

答案 1 :(得分:2)

我们需要其他来源,但有几个可能的答案:

  • 网格正在通过宏(#define)
  • 重载
  • 未包含Grid类定义。

答案 2 :(得分:1)

为了在你的另一个类中使用Grid,你需要在头文件中包含Grid的头部,或者执行类的前向声明,并在类中声明它作为指针然后在你的实例中实例化它。 cpp文件。

class Grid;

class Ocean {
   Grid* grid;
};

或者最好:

class Ocean {
    boost::shared_ptr<Grid> grid;
};