Avatar billede driis Nybegynder
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)
Avatar billede arne_v Ekspert
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};
Avatar billede driis Nybegynder
16. oktober 2005 - 19:33 #2
Du har ret, læg et svar ;-)
Avatar billede arne_v Ekspert
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
Avatar billede driis Nybegynder
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";
Avatar billede arne_v Ekspert
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) ?
Avatar billede arne_v Ekspert
16. oktober 2005 - 20:17 #6
nu er den jo static, men den compiler tilsyneladende også uden static

hmm
Avatar billede bertelbrander Novice
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[] = ...;
Avatar billede bertelbrander Novice
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]'
Avatar billede arne_v Ekspert
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
Avatar billede bertelbrander Novice
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...
Avatar billede arne_v Ekspert
16. oktober 2005 - 21:04 #11
den accepterer ihvertfald ikke en initialisering med "..." (forskel på char[] og char*)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester