Ausdruck wurde nicht als Konstante-C ++ ausgewertet

9

Ich habe den folgenden Code geschrieben, um eine Dezimalzahl in base2 umzuwandeln. wahrscheinlich nicht der beste, aber es funktionierte bei Eclipse. Wenn ich jedoch versuche, es auf Visual Studio auszuführen, erhalte ich diese Fehlermeldung in Zeile 10 (hervorgehoben): "Ausdruck wurde nicht zu einer Konstante ausgewertet". Warum ist das so?

%Vor%     
John 29.10.2015, 19:59
quelle

2 Antworten

15
%Vor%

Ist ein Array variabler Länge und ist nicht Standard in C ++. Einige Compiler wie GCC erlauben sie als Erweiterungen, aber MSVS wird sie nicht kompilieren.

Um ein dynamisches Array zu erhalten, müssen Sie einen Zeiger und new

verwenden %Vor%

Oder noch besser: Überarbeiten Sie die Funktion so, dass Sie ein std::string verwenden, das die Speicherverwaltung übernimmt für dich.

    
NathanOliver 29.10.2015, 20:01
quelle
6

sizeOfRetNum ist kein konstanter Wert - mit anderen Worten, sein Wert ist zur Kompilierzeit nicht bekannt.

Wenn Sie Speicher reservieren und den Wert bis zur Laufzeit nicht kennen, müssen Sie die dynamische Speicherzuweisung verwenden. Dies geschieht in C ++ mit operator new . Der Speicher, den Sie sich selbst mit new zuweisen, muss ebenfalls mit delete oder delete[] freigegeben werden.

Ändern Sie char ansString[sizeOfRetNum]; in char * ansString = new char[sizeOfRetNum]; . Vergessen Sie nicht, delete [] ansString; aufzurufen, bevor die Funktion zurückkehrt, oder Sie haben einen Speicherverlust.

    
E. Moffat 29.10.2015 20:05
quelle

Tags und Links