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