Expected unqualified-id before numeric constant for defining a number

自古美人都是妖i 提交于 2019-12-09 07:43:26

问题


I'm new to C++, so I don't know what they mean with this error in a phidget-code example:

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

Is there a syntax error? Or something else? I use #define instead of int.

EDIT: added full error log..

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

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


回答1:


The full error is

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

You're trying to declare a variable with the same name as a macro, but that can't be done. The preprocessor has already stomped over the program, turning that into string 1234;, which is not a valid declaration. The preprocessor has no knowledge of the program structure, and macros don't follow the language's scope rules.

Where possible, use language features like constants and inline functions rather than macros. In this case, you might use

const int homeid = 1234;

This will be scoped in the global namespace, and can safely be hidden by something with the same name in a narrower scope. Even when hidden, it's always available as ::homeid.

When you really need a macro, it's wise to follow the convention of using SHOUTY_CAPS for macros. As well as drawing attention to the potential dangers and wierdnesses associated with macro use, it won't clash with any name using other capitalisation.




回答2:


That line is fine.

What is most likely happening is that the compiler is complaining not about the macro definition itself, but about the use of the macro. Example:

#define homeid 1234

void homeid() {
}

When compiling this with GCC, I get:

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() {
      ^

This tells you that the numeric constant prompting the complaint is part of the macro definition, but also that that macro is used (in this case seemingly by accident) on line 3. Take a look at where the macro expansion is coming from in your code.



来源:https://stackoverflow.com/questions/27524755/expected-unqualified-id-before-numeric-constant-for-defining-a-number

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!