2012-12-12 250 views
0

我已经在头文件中声明的类(.h)中,我在一个.cpp定义它的构造和功能(包括默认的构造)声明对象

现在我想声明一个对象在另一个头文件中,并在另一个.cpp文件中初始化它。我需要这样做,因为对象的初始化取决于cpp中的一些变量。 在.h文件中声明了这样:

Saboteur *activeFault; /*Saboteur is the class, activeFault the object*/ 

当我尝试编译我的程序,我得到以下错误:

error C2143: syntax error : missing ';' before '*'.

任何线索,为什么出现这种情况?

提示:#includes都可以,最奇怪的是,当编译器试图编译定义class Saboteur函数的.cpp文件时,出现错误,但它说错误在上面写的这行(这是另一个cpp文件)。

+2

看起来像编译器在处理这条线时还没有看到'Saboteur'的定义。 –

回答

4

原型破坏者类。声明:

class Saboteur; 

之前宣布的activeFault

然后,在其他地方,您提供class Saboteur的完整定义。

+0

好的,谢谢,这有效,但为什么我必须原型呢?我的意思是,我在头文件中包含头文件开头的类声明,我不明白为什么我需要这样做。 – Iban

+0

@Iban:如果你已经包含了一个声明这个类的头文件,那么你不需要另一个声明。但这听起来像你没有包括它。也许你有两个标题都试图包含对方? –

+0

@MikeSeymour有时候我会在从另一个.h文件复制的include-guard中绊倒,而在拷贝中更改werent。这可能会导致这样的效果... –

0

有浮现在脑海

  1. 是否包含了破坏者的头文件 产生这个问题.h文件很多想法?
  2. 这是一个模板类吗?
  3. 也许标题 包含破坏者的文件实际上包含在 之前的破坏者类。在这种情况下添加您的其他.h文件:

    class Saboteur;