c++ 用于定义数字的数字常量前应有未限定的ID

qjp7pelc  于 2023-03-09  发布在  其他
关注(0)|答案(3)|浏览(321)

我是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

dfddblmv

dfddblmv1#

完整的错误是

error: expected unqualified-id before numeric constant
 note: in expansion of macro ‘homeid’
string homeid;
       ^

你试图声明一个与宏同名的变量,但是这是不可能的。预处理器已经践踏了程序,将其转换为string 1234;,这不是一个有效的声明。预处理器不了解程序结构,宏也不遵循语言的作用域规则。
在可能的情况下,使用常量和内联函数等语言功能,而不是宏。

const int homeid = 1234;

它的作用域是全局名称空间,可以安全地隐藏在一个更小的作用域中,即使隐藏了,它也可以作为::homeid使用。
当你真的需要一个宏的时候,遵循使用SHOUTY_CAPS的惯例是明智的。除了提醒你注意与宏使用相关的潜在危险和怪异之外,它不会与任何使用其他大写形式的名称冲突。

vzgqcmou

vzgqcmou2#

那条线很好。
最有可能发生的情况是编译器抱怨的不是宏定义本身,而是宏的 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行被 used(在本例中似乎是意外)。请查看代码中宏扩展的来源。

wj8zmpe1

wj8zmpe13#

当定义的数值常量也在代码的其他地方声明时,也会发生此错误。例如,像下面这样声明并在任何类或函数外部调用。

#define MODEL_SELECT_PLOWMAN
    
    ....
    
    MODEL_SELECT_PLOWMAN

    void someFunc(){
       ...
    }

在此特定情况下,正确声明了#define homeid 1234,但homeid很可能放错位置并在代码中重复(并且没有#define

相关问题