【问题标题】:Expected unqualified-id before numeric constant for defining a number用于定义数字的数字常量之前的预期 unqualified-id
【发布时间】:2015-02-15 22:50:58
【问题描述】:

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

是否存在语法错误?或者是其他东西?我使用 #define 而不是 int。

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

完整的错误日志:http://pastebin.com/3vtbzmXD

完整的 main.cpp 代码:http://pastebin.com/SDTz8vni

【问题讨论】:

  • 您需要显示更多Main.cpp
  • 首选const int homeid = 1234; 而不是define
  • 我很好奇第 1..7 行是什么
  • @JosephMansfield 您可能会想到标准前的 C 编译器,它并不总是支持它,但第一个 C 标准和第一个 C++ 标准都允许它。
  • 现在你只需要提供completeunedited错误输出。

标签: c++ syntax c-preprocessor


【解决方案1】:

那条线很好。

最有可能发生的是编译器抱怨的不是宏定义本身,而是宏的使用。示例:

#define homeid 1234

void homeid() {
}

使用 GCC 编译时,我得到:

so.cc:1:16:错误:数字常量之前的预期 unqualified-id #define homeid 1234 ^ so.cc:3:6:注意:在宏“homeid”的扩展中 无效的homeid(){ ^

这告诉您提示投诉的数字常量是宏定义的一部分,而且该宏在第 3 行使用(在这种情况下似乎是偶然的)。看看您的代码中宏扩展的来源。

【讨论】:

    【解决方案2】:

    完整的错误是

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

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

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

    const int homeid = 1234;
    

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

    当您确实需要宏时,最好遵循使用SHOUTY_CAPS 的惯例来处理宏。除了提请注意与使用宏相关的潜在危险和怪异之外,它不会与使用其他大写字母的任何名称发生冲突。

    【讨论】:

    • 我现在的错误少了很多,但现在我有了新的错误:error: expected initializer before numeric constant const int homeid 1234
    • @Kil'jaeden:你错过了变量名和初始化程序之间的=
    • 谢谢,已修复...我确实有另一个错误,但这与此无关。
    • 当人们使用“CONST”之类的东西作为他们名字的一部分但 windows.h 文件用宏覆盖它时,我遇到了这个失败。 #undef 摆脱它...奇怪...
    猜你喜欢
    • 2012-08-03
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多