16. oktober 2005 - 19:12
Der er
10 kommentarer og 1 løsning
Field initializer
Jeg har følgende: class SenderPDU : public PDU { public: SenderPDU(char * szMessage,char * szPhoneNo); protected: void createPDU(); const static char pduTemplate[] = {0x00,0x11,0x00,0x0A,0x91}; }; Compileren brokker sig over initialiseringen af pduTemplate. Hvordan initialiserer jeg mit const char array ? (Jeg tror jeg har taget skade af at bruge C# til daglig)
Annonceindlæg fra Computerworld
Geopolitik i cyberspace
Mark Fiedel i Styrelsen for Samfundssikkerhed påpeger behovet for, at Danmark kigger kritisk på leverandørafhængighed.
13. juni 2025
16. oktober 2005 - 19:18
#1
den vil vist have: class SenderPDU : public PDU { public: SenderPDU(char * szMessage,char * szPhoneNo); protected: void createPDU(); const static char pduTemplate[5]; }; const char SenderPDU::pduTemplate[] = {0x00,0x11,0x00,0x0A,0x91};
16. oktober 2005 - 19:33
#2
Du har ret, læg et svar ;-)
16. oktober 2005 - 19:35
#3
jeg synes ikke at det er "pænt" fordi størrelsem skal defineres 2 steder men ANSI C++ er lidt restriktiv med hensyn til initializers
16. oktober 2005 - 19:50
#4
Microsoft's compiler ( cl.exe version 12.0 ) tillader dette, jeg ved dog ikke om det er en afvigelse fra ANSI C++ ? class SenderPDU : public PDU { public: SenderPDU(char * szMessage,char * szPhoneNo); protected: void createPDU(); const static char pduTemplate[]; }; const char SenderPDU::pduTemplate[] = "0011000A9100000000000000AA";
16. oktober 2005 - 20:14
#5
det gør GCC også men hvad pokker gør compileren ved allokering (i en .cpp fil som ikke inkluderer initializeren) ?
16. oktober 2005 - 20:17
#6
nu er den jo static, men den compiler tilsyneladende også uden static hmm
16. oktober 2005 - 20:27
#7
Kompileren behøver ikke pduTemplate når man new'er en SenderPDU, den optager ikke plads pr objekt. Så man kan godt new'e et SenderPDU. Men man kan ikke få størrelsen (sizeof) på pduTemplate hvis ikke kompileren kan se: const char SenderPDU::pduTemplate[] = ...;
16. oktober 2005 - 20:31
#8
Hvis jeg fjerne static foran: const char pduTemplate[]; Får jeg: error: uninitialized member `SenderPDU::pduTemplate' with `const' type `const char[0u]'
16. oktober 2005 - 20:45
#9
det gør jeg ikke men det gør jeg senere når jeg forsøger at kalde en constructor uden at initialisere den const
16. oktober 2005 - 20:53
#10
Ja, det er også der jeg ser problemet, men uden at kalde constructoren giver det vel ingen mening. Jeg kan ikke se hvordan man skulle kunne lave en constructor, der vil kunne accepteres. Man kunne overveje en template...
16. oktober 2005 - 21:04
#11
den accepterer ihvertfald ikke en initialisering med "..." (forskel på char[] og char*)
Kurser inden for grundlæggende programmering