Gå till innehåll

Overkill C++


Gäst al6

Recommended Posts

Är det någon här som är en riktig rackafjongare på C++? Det är så att jag testade det jag lärt mig ur min bok, och kom på en sak som inte kan stämma, kanske fel i Visual Studio?

Om jag vill göra en vektor av pekare till char (en vektor av strängar) skriver jag:

char *test[] = {"Första strängen","Andra strängen","Tredje strängen"};

Men eftersom en vektor inte kan ändra sin adress, utan måste användas tillsammans med ett index, ville jag istället ha en pekare till en pekare till en char för att slippa den onödiga "index-variabeln":

char **test = {"Första strängen","Andra strängen","Tredje strängen"};

Detta är dock fel enligt mitt Visual Studio 2008; initieringen blir fel säger den, så jag testade att skriva:

char *temp[] = {"Första strängen","Andra strängen","Tredje strängen"};

char **test = temp;

Vilket fungerar utmärkt, vilket jag inte förstår; det är ju samma sak som föregående sats, fast att test får sin adress av temp, inte via initieringen?

Så min fråga är: Är detta ett fel i Microsofts kompilator, eller ska jag använda någon typomvandling för att kunna skapa denna char ** och samtidigt kunna tilldela den en adress vid initieringen?

Felmeddelandet lyder: error C2440: 'initializing' : cannot convert from 'const char [16]' to 'char **'.

Länk till kommentar
Dela på andra webbplatser

Gäst Fluorescent79

Jag erkänner att det var ett tag sedan jag pysslade med c++, men jag ska försöka förklara min tolkning av ditt bekymmer.

När du kodar char *test[] = {...} så säger du, skapa en pekare till enchar vektor med inehåll ...

Men när du kodar char **test = {...} så säger du, skapa en pekare till en pekare med inehåll. Kompilatorn har helt enkelt inte fått förklarat för sig att det ska vara en vektor inblandad.

Verkr det rimligt??

Länk till kommentar
Dela på andra webbplatser

Bra svar :) Jag var lite inne på det också eftersom jag inte alls säger till att det rör sig om en massa tecken mellan dessa pekare, men om jag först deklarerar det som en vektor av pekare så förstår tydligen kompilatorn det.

Nåja, det är ju trots allt inget stort problem, mer att man får deklarera en temporär vektor av pekare och sen göra sin char ** av den. Men det borde väl finnas någon typomvandling man kan göra för att få kompilatorn att förstå vad det handlar om?

Kul att någon förstod vad det rörde sig om :)

Länk till kommentar
Dela på andra webbplatser

Delta i dialogen

Du kan skriva svaret nu och registrera dig senare, Om du har ett konto, logga in nu för att svara på inlägget.

Gäst
Svara i detta ämne...

×   Du har klistrat in innehåll med formatering.   Ta bort formatering

  Only 75 emoji are allowed.

×   Din länk har automatiskt bäddats in.   Visa som länk istället

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Skapa nytt...