2016-03-23 16 views
5

so ive mehrere (und erneut gesendet) C++ Bücher gelesen, und das Lernen über Vektoren und sie alle sagen mir einen Vektor wie folgt zu definieren:Vector C++ 98 Fehler

vector<int> v1 = {4 ,3 ,5}; 

aber wenn ich es kompilieren (Im mit gcc GNU Compiler in Codeblöcken) kommt es oben mit diesem Fehler

in C++ 98 ‚v1‘ muss vom Konstruktor initialisiert wird nicht durch ‚{...}‘ und ich bekomme auch ein anderes darunter, dass diese Sais: konnte nicht konvertieren '{4, 3, 5}' von 'Klammer umschlossen Initialisiererliste' auf 'std :: vector v1'

, wenn Sie mir helfen könnte es sehr geschätzt werden würde. Und ich habe die Vektorbibliothek aufgenommen.

+0

Entschuldigung wegen des Tippfehlers. –

+0

welchen Compiler benutzen Sie und warum benutzen Sie C++ 98 heutzutage? – myaut

+0

Nein, ich benutze den GCC-Compiler, ich bin ziemlich sicher, dass es C++ 14 verwendet, weil es mich C++ 14 Dinge tun lässt. –

Antwort

6

Die von Ihnen verwendete Initialisierung wird initializer list genannt und wird ab unterstützt.

Um sicherzustellen, dass der Code kompiliert wird, verwenden Sie die Option C++11 oder später -std. Oder verwenden Sie im Allgemeinen nicht C++98.

Wenn Sie g ++ verwenden, lesen Sie bitte: Compiling C++11 with g++


Von Kommentare OP Codeblöcke verwendet. Sie können die folgenden Schritte aus, bevor Sie die Kompilierung Knopf schlagen: (Quelle: How can I add C++11 support to Code::Blocks compiler?)

  1. Zum Symbolleiste -> Einstellungen -> Compiler
  2. Im "Selected Compiler" Drop-Down-Menü, stellen Sie sicher, „GNU GCC Compiler“ ausgewählt ist
  3. darunter wählen Sie den „Compiler-Einstellungen“ und dann die „Compiler-Flags“ Tab unter
  4. In der folgenden Liste, stellen Sie sicher, dass das Feld für „Haben Sie g ++ die C folgen ++ 11 ISO C++ - Sprachstandard [-std = C++ 11] "ist geprüft
  5. Klicken Sie auf OK
+0

Vielen Dank, Sie waren eine große Hilfe! –

+0

@Harrythehacker Ich bin froh, dass es dir geholfen hat. –

4

Die C++ 98 Standard nicht unterstützt initializer Listen speichern Standardcontainer zu initialisieren.

Versuchen Sie, geeignete Compileroptionen zum Kompilieren des Codes gemäß dem C++ 2011-Standard festzulegen.

Ein weiterer Ansatz ist es, Elemente zu dem Vektor individuell wie

std::vector<int> v1; 
v1.reserve(3); 

v1.push_back(4); 
v1.push_back(3); 
v1.push_back(5); 

Anstelle der Member-Funktion hinzufügen push_back Sie Betreiber += überlastet verwenden können.Zum Beispiel

std::vector<int> v1; 
v1.reserve(3); 

v1 += 4; 
v1 += 3; 
v1 += 5; 

oder eine Anordnung wie

const size_t N = 3; 
int a[N] = { 4, 3, 5 }; 
std::vector<int> v1(a, a + N); 
2

Compilieren mit der -std = C++ 11 Compileroption am Ende der Leitung in der Make-Datei zu verwenden.

So zum Beispiel:

g++ -ggdb -O0 -c ENiX_Chocky.cpp -std=c++11 
g++ -ggdb -O0 -c ENiX_NLPTest.cpp -std=c++11 
... 

Dann, wenn Sie verknüpfen, verwenden Sie die -std = C++ 11 Option wieder:

g++ -ggdb -O0 ENiX_Chocky.cpp ENiX_NLPTest.cpp -o CLINLPTest.cpp -std=c++11 

Der Fehler wird sofort verschwinden.