我是C++的新手,所以我不知道在一个pidget代码示例中,这个错误意味着什么:
主程序: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
3条答案
按热度按时间dfddblmv1#
完整的错误是
你试图声明一个与宏同名的变量,但是这是不可能的。预处理器已经践踏了程序,将其转换为
string 1234;
,这不是一个有效的声明。预处理器不了解程序结构,宏也不遵循语言的作用域规则。在可能的情况下,使用常量和内联函数等语言功能,而不是宏。
它的作用域是全局名称空间,可以安全地隐藏在一个更小的作用域中,即使隐藏了,它也可以作为
::homeid
使用。当你真的需要一个宏的时候,遵循使用
SHOUTY_CAPS
的惯例是明智的。除了提醒你注意与宏使用相关的潜在危险和怪异之外,它不会与任何使用其他大写形式的名称冲突。vzgqcmou2#
那条线很好。
最有可能发生的情况是编译器抱怨的不是宏定义本身,而是宏的 use。例如:
当用GCC编译时,我得到:
这告诉您,引起抱怨的数值常量是宏定义的一部分,而且该宏在第3行被 used(在本例中似乎是意外)。请查看代码中宏扩展的来源。
wj8zmpe13#
当定义的数值常量也在代码的其他地方声明时,也会发生此错误。例如,像下面这样声明并在任何类或函数外部调用。
在此特定情况下,正确声明了
#define homeid 1234
,但homeid
很可能放错位置并在代码中重复(并且没有#define
)