C ++错误:'class'之前的预期初始化程序

时间:2012-08-19 05:36:40

标签: c++

当我编译我正在编写的程序时,我得到:

  

在'class'之前预期的初始化程序

我的Class.h文件中出现

错误。我查找了互联网上的错误消息,但找不到确切的错误,虽然类似的错误似乎是由于缺少分号引起的,但我不明白为什么我需要一个。这是错误指向的代码,我之前没有其他函数或类。

class Account
{
    public:
    double dAccountBalance;

    double dAccountChange(double dChange);
};

Class.cpp文件中定义了double dAccountChange(double dChange)函数。我不认为这是错误的来源,但这是代码;

double Account::dAccountChange(double dChange)
{
    dAccountBalance += dChange;

    return 0.0;
}

当我将Class.h中的代码更改为这样时,

;
class Account
{
    public:
    double dAccountBalance;

    double dAccountChange(double dChange);
};

它不会生成错误消息,但我无法理解为什么我需要之前的分号作为我之前的唯一代码,它是以下预处理器行。

#ifndef CLASS_H_INCLUDED
#define CLASS_H_INCLUDED

有关错误产生原因的任何想法?

2 个答案:

答案 0 :(得分:7)

最有可能的是,在 class.h之前立即包含的头文件中,您将拥有以下内容:

class xyzzy {
    int plugh;
}

没有结束分号。这将使你的代码序列:

class xyzzy {
    int plugh;
}
class Account
{
    public:
    double dAccountBalance;

    double dAccountChange(double dChange);
};

显然无效。在第一行之前在class.h中插入一个分号将修复它,但它显然是错误的放置它(因为它意味着你需要的所有头文件一个起始分号 - 也是,它是第一个标题中定义的一部分,应该在那里。)

现在这可能不是确切的代码序列,但它会非常相似,而潜在的原因将是上一个标题中缺少一段文字。

您应该返回并将其放在之前的包含文件中。

例如,考虑:

include1.h:
    class xyzzy {
        int plugh;
    }
include2.h:
    class twisty {
        int little_passages;
    };
main.cpp:
    #include "include1.h"
    #include "include2.h"
    int main (void) {
        return 0;
    }

编译它会产生:

include2.h:3: error: multiple types in one declaration

但是将分号放在include1.h的末尾(或include2.h的开头虽然我们已经确定这不是一个好主意)会修复它。

答案 1 :(得分:2)

问题出现在其中一个其他标题中,您可以在class.h之前#include。

如果您向我们展示主cpp文件的顶部,则可能会提供线索。