2

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

“类”之前的预期初始化程序

我的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

关于为什么会产生错误的任何想法?

4

2 回答 2

9

最有可能的是,在您之前 包含的头文件中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虽然我们已经确定这不是一个好主意)将解决它。

于 2012-08-19T05:54:33.973 回答
3

问题出在其他标头之一中,即您在 #include 之前的标头之一class.h

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

于 2012-08-19T05:43:01.853 回答