数字常量之前预计不合格-ID用于定义一个号码

问题描述 投票:20回答:2

我是新的C ++,所以我不知道他们的意思这个错误在phidget-代码示例:

Main.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

c++ syntax c-preprocessor
2个回答
22
投票

完整的错误是

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

你试图声明具有相同的名称作为宏变量,但不能做。预处理器已经踩了程序,把该进string 1234;,这不是一个有效的声明。预处理没有程序结构的知识,和宏不遵循语言的范围规则。

如果可能的话,使用的语言功能,如常数和内联函数,而不是宏。在这种情况下,你可以使用

const int homeid = 1234;

这将在全局命名空间的作用域,并且可以安全地被什么东西在一个较窄的范围相同的名称被隐藏。隐藏的情况下,也总是可以作为::homeid

当你真的需要一个宏,明智的做法是遵循使用SHOUTY_CAPS为宏的约定。以及提请注意潜在的危险,并与宏使用相关wierdnesses,也不会使用其他任何大小写名称冲突。


8
投票

这条线是好的。

什么是最有可能的情况是,编译器不会抱怨宏定义本身,而是使用了宏。例:

#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行看一看在宏扩展是从你的代码来。

© www.soinside.com 2019 - 2024. All rights reserved.