我是C ++的新手,所以我不知道在phidget-code示例中这个错误意味着什么:
Main.cpp:8:16:错误:数字常量之前的预期unqualified-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
答案 0 :(得分:20)
完整错误是
error: expected unqualified-id before numeric constant
note: in expansion of macro ‘homeid’
string homeid;
^
您尝试声明与宏名称相同的变量,但无法完成。预处理器已经踩过程序,将其转换为string 1234;
,这不是一个有效的声明。预处理器不了解程序结构,宏不遵循语言的范围规则。
尽可能使用常量和内联函数等语言功能而不是宏。在这种情况下,您可以使用
const int homeid = 1234;
这将在全局命名空间中作用域,并且可以安全地被更窄范围内具有相同名称的内容隐藏。即使在隐藏时,它也始终可用::homeid
。
当你真的需要一个宏时,遵循使用SHOUTY_CAPS
宏的约定是明智的。除了提请注意与宏观使用相关的潜在危险和诡计之外,它还不会使用其他大写字母与任何名称发生冲突。
答案 1 :(得分:8)
那条线很好。
最有可能发生的事情是,编译器不是抱怨宏定义本身,而是关于宏的 use 。例如:
#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行的使用(在这种情况下看似偶然)是宏。看看宏扩展来自你的代码。