Kil*_*den 24 c++ syntax c-preprocessor
我是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
Run Code Online (Sandbox Code Playgroud)
有语法错误吗?或者是其他东西?我使用#define而不是int.
编辑:添加完整的错误日志..
完整的错误日志:http://pastebin.com/3vtbzmXD
完整的main.cpp代码:http://pastebin.com/SDTz8vni
Mik*_*our 23
完整的错误是
error: expected unqualified-id before numeric constant
note: in expansion of macro ‘homeid’
string homeid;
^
Run Code Online (Sandbox Code Playgroud)
您正在尝试声明一个与宏名称相同的变量,但这是无法完成的.预处理器已经踩过程序,将其转换为string 1234;
,这不是一个有效的声明.预处理器不了解程序结构,宏不遵循语言的范围规则.
在可能的情况下,使用常量和内联函数等语言功能而不是宏.在这种情况下,您可以使用
const int homeid = 1234;
Run Code Online (Sandbox Code Playgroud)
这将在全局命名空间中作用域,并且可以在较窄的范围内安全地被具有相同名称的内容隐藏.即使是隐藏的,它也总是可用的::homeid
.
当你真的需要一个宏时,遵循SHOUTY_CAPS
宏的使用惯例是明智的.除了提请注意与宏观使用相关的潜在危险和威胁之外,它不会与使用其他大写字母的任何名称冲突.
小智 8
这条线很好.
最可能发生的是编译器不是抱怨宏定义本身,而是抱怨宏的使用.例:
#define homeid 1234
void homeid() {
}
Run Code Online (Sandbox Code Playgroud)
用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行使用的宏(在这种情况下看似偶然).看看代码中宏扩展的来源.