c++ - 用于定义数字的数字常量之前的预期 unqualified-id

标签 c++ syntax c-preprocessor

我是 C++ 新手,所以我不知道在 phidget-code 示例中这个错误是什么意思:

Main.cpp:8:16: error: expected unqualified-id before numeric constant

//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。

编辑:添加完整的错误日志..

complete error-log: http://pastebin.com/3vtbzmXD

Full main.cpp code: http://pastebin.com/SDTz8vni

最佳答案

完整的错误是

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

您正试图声明一个与宏同名的变量,但这无法完成。预处理器已经踩过程序,将其转换为 string 1234;,这不是一个有效的声明。预处理器不知道程序结构,宏不遵循语言的范围规则。

尽可能使用常量和内联函数等语言特性,而不是宏。在这种情况下,您可以使用

const int homeid = 1234;

这将被限定在全局命名空间中,并且可以在更窄的范围内被同名的东西安全地隐藏。即使在隐藏时,它也始终以 ::homeid 的形式提供。

当你真的需要一个宏时,遵循使用 SHOUTY_CAPS 宏的约定是明智的。除了提请注意与使用宏相关的潜在危险和怪异之外,它不会与使用其他大写字母的任何名称发生冲突。

关于c++ - 用于定义数字的数字常量之前的预期 unqualified-id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27524755/

相关文章:

C++ 有没有办法使用 vector 的内容作为键和自定义值来初始化 unordered_map?

c++ - 将静态链接库变成动态链接库

java - Java非法启动类型)预期

C预处理器编译异常时使用 "bitwise and"

c++ - Matlab 和 C++ 之间的转换

c++ - 关于 C++ 中基于范围的 for 循环的困惑

c# - 在 C# 的继承链中创建调用静态方法类型的对象

java - 这是什么语法 - public static 9000?

c++ - #pragma 警告 - 文件特定?

c - 在 c 中使用 #define 宏预处理器查找 min(a,b,c) 或 max(a,b,c)