Gäst al6 Postad Januari 25, 2008 Dela Postad Januari 25, 2008 Ä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 **'. Citera Länk till kommentar Dela på andra webbplatser Fler delningsalternativ...
Gäst Fluorescent79 Postad Januari 25, 2008 Dela Postad Januari 25, 2008 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?? Citera Länk till kommentar Dela på andra webbplatser Fler delningsalternativ...
Gäst al6 Postad Januari 26, 2008 Dela Postad Januari 26, 2008 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 Citera Länk till kommentar Dela på andra webbplatser Fler delningsalternativ...
Recommended Posts
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.