Ожидаемый unqualified-id перед числовой константой для определения числа

Я новичок в C++, поэтому я не знаю, что они имеют в виду с этой ошибкой в Примере phidget-code:

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.

EDIT: добавлен полный журнал ошибок..

полный журнал ошибок:http://pastebin.com/3vtbzmXD

полный main.код СРР : http://pastebin.com/SDTz8vni

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 для макросов. Помимо привлечения внимания к потенциальным опасностям и странностям, связанным с использованием макросов, он не будет конфликтовать с любым именем, используя другую капитализацию.


эта линия в порядке.

скорее всего, компилятор жалуется не на само определение макроса, а на использовать макро. Пример:

#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. Брать посмотрите, откуда в вашем коде происходит расширение макроса.