当我编译我正在编写的程序时,我得到:
我的在'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
有关错误产生原因的任何想法?
答案 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
文件的顶部,则可能会提供线索。