Pytanie Oczekiwano niewykwalifikowanego identyfikatora przed stałą numeryczną do definiowania liczby


Jestem nowy w C ++, więc nie wiem, co oznaczają z tym błędem w przykładzie kodu phidget:

Main.cpp: 8: 16: błąd: oczekiwano niekwalifikowanego identyfikatora przed stałą numeryczną

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

Czy jest błąd składni? Albo coś innego? Używam #define zamiast int.

EDYCJA: dodano pełny dziennik błędów ..

kompletny dziennik błędów: http://pastebin.com/3vtbzmXD

Pełny kod main.cpp: http://pastebin.com/SDTz8vni


18
2017-12-17 11:39


pochodzenie


Musisz pokazać więcej Main.cpp. - Joseph Mansfield
woleć const int homeid = 1234; koniec define. - Jarod42
Jestem ciekawy, co jest na linii 1..7 - WhozCraig
@JosephMansfield Być może myślisz o pre-standardowym kompilatorze C, który nie zawsze go wspierał, ale pozwala na to pierwszy standard C i pierwszy standard C ++. - hvd
Teraz wystarczy podać kompletny i nieedytowany wyjście błędów. - Some programmer dude


Odpowiedzi:


Pełny błąd to

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

Próbujesz zadeklarować zmienną o tej samej nazwie co makro, ale nie można tego zrobić. Preprocesor przeszedł już przez program, zamieniając go w string 1234;, co nie jest prawidłową deklaracją. Preprocesor nie ma wiedzy o strukturze programu, a makra nie są zgodne z regułami zakresu językowego.

Jeśli to możliwe, używaj funkcji językowych, takich jak stałe i funkcje śródliniowe, a nie makr. W takim przypadku możesz użyć

const int homeid = 1234;

To będzie miało zasięg w globalnej przestrzeni nazw i może być bezpiecznie ukryte przez coś o tej samej nazwie w węższym zakresie. Nawet gdy jest ukryty, jest zawsze dostępny jako ::homeid.

Kiedy naprawdę potrzebujesz makra, mądrze postępuj zgodnie z konwencją używania SHOUTY_CAPS dla makr. Oprócz zwracania uwagi na potencjalne zagrożenia i dziwactwa związane z używaniem makr, nie będzie kolidować z żadną nazwą przy użyciu innych wielkich liter.


16
2017-12-17 12:03



Mam teraz znacznie mniej błędów, ale teraz mam nowy, który jest następujący: błąd: oczekiwany inicjator przed stałą liczbową const int homeid 1234 - Kil'jaeden
@ Kil'jaeden: Tęskniłeś = między nazwą zmiennej a inicjatorem. - Mike Seymour
Dzięki, to naprawiło ... Mam inny błąd, ale to nie ma z tym nic wspólnego. - Kil'jaeden


Ta linia jest w porządku.

Najprawdopodobniej dzieje się tak, że kompilator nie narzeka na samą definicję makr, ale na posługiwać się makro. Przykład:

#define homeid 1234

void homeid() {
}

Podczas kompilacji tego z GCC otrzymuję:

so.cc:1:16: error: oczekiwano unqualified-id przed stałą numeryczną
 #define homeid 1234
                ^
so.cc:3:6: note: w rozszerzeniu makra "homeid"
 void homeid () {
      ^

Oznacza to, że stała numeryczna powodująca złożenie skargi jest częścią definicji makra, ale także, że jest to makro używany (w tym przypadku pozornie przez przypadek) na linii 3. Sprawdź, skąd pochodzi rozszerzenie makr w twoim kodzie.


8
2017-12-17 11:49