我是新的C ++,所以我不知道他们的意思这个错误在phidget-代码示例:
Main.cpp的:8:16:错误:数字常量之前预期不合格-ID
//verander de volgende informatie naar de informatie voor jouw database
#define dserver "oege.ie.hva.nl"
#define duser "username"
#define dpassword "password"
#define ddatabase "databasename"
#define homeid 1234 //line 8
是否有语法错误?或者是其他东西?我使用的#define不是int的。
编辑:添加了完整的错误日志..
完整的错误日志:http://pastebin.com/3vtbzmXD
完整的main.cpp代码:http://pastebin.com/SDTz8vni
完整的错误是
error: expected unqualified-id before numeric constant
note: in expansion of macro ‘homeid’
string homeid;
^
你试图声明具有相同的名称作为宏变量,但不能做。预处理器已经踩了程序,把该进string 1234;
,这不是一个有效的声明。预处理没有程序结构的知识,和宏不遵循语言的范围规则。
如果可能的话,使用的语言功能,如常数和内联函数,而不是宏。在这种情况下,你可以使用
const int homeid = 1234;
这将在全局命名空间的作用域,并且可以安全地被什么东西在一个较窄的范围相同的名称被隐藏。隐藏的情况下,也总是可以作为::homeid
。
当你真的需要一个宏,明智的做法是遵循使用SHOUTY_CAPS
为宏的约定。以及提请注意潜在的危险,并与宏使用相关wierdnesses,也不会使用其他任何大小写名称冲突。
这条线是好的。
什么是最有可能的情况是,编译器不会抱怨宏定义本身,而是使用了宏。例:
#define homeid 1234
void homeid() {
}
当用gcc编译,我得到:
so.cc:1:16: error: expected unqualified-id before numeric constant #define homeid 1234 ^ so.cc:3:6: note: in expansion of macro ‘homeid’ void homeid() { ^
这告诉你的是,数字常量促使投诉是宏定义的一部分,而且还在于宏的位置(在这种情况下,看似偶然)在第3行看一看在宏扩展是从你的代码来。