用于定义数字的数字常量之前的预期非限定id

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行使用的宏(在这种情况下看似偶然).看看代码中宏扩展的来源.