2012-04-11 14 views
2

Ich erhalte diesen Fehler während der Kompilierung (g ++ 4.4.6):C++ fehlt Initializer Fehler

main.cpp: In function ‘int main()’: 
main.cpp:27: error: expected initializer before ‘:’ token 
main.cpp:33: error: expected primary-expression before ‘for’ 
main.cpp:33: error: expected ‘;’ before ‘for’ 
main.cpp:33: error: expected primary-expression before ‘for’ 
main.cpp:33: error: expected ‘)’ before ‘for’ 
main.cpp:33: error: expected initializer before ‘:’ token 
main.cpp:36: error: could not convert ‘((list != 0u) ? (list->SortedList::~SortedList(), operator delete(((void*)list))) : 0)’ to ‘bool’ 
main.cpp:37: error: expected primary-expression before ‘return’ 
main.cpp:37: error: expected ‘)’ before ‘return’ 

Mein Code ist wie folgt:

#include <iostream> 
#include "Student.h" 
#include "SortedList.h" 

using namespace std; 

int main() { 
    SortedList *list = new SortedList(); 

    Student create[100]; 
    int num = 100000; 

    for (Student &x : create) { // <--Line 27 
     x = new Student(num); 
     num += 10; 
    } 

    for (Student &x : create) 
    list->insert(&x); 

    delete list; 
    return 0; 
} 

Wer möglicherweise die Quelle der weiß, Fehler wäre eine große Hilfe. Außerdem sind Student und SortedList Objekte, die in ihren .h-Dateien deklariert sind.

+3

Kompilieren Sie mit '-std = C++ 0x'? – ildjarn

+0

Ich bin etwas neu in C++ also, wenn Sie erklären könnten, was -std = C++ 0x tut oder bedeutet, dass würde sehr geschätzt –

+1

@PatMurray: Entfernungsbasierte für Schleifen (Ihre Zeile 27) sind eine C++ 11-Funktion . Sie müssen "-std = C++ 0x" oder (-std = c + 11 in neueren Versionen) an den Compiler übergeben, um C++ 11-Funktionen verwenden zu können. Ich würde jedoch empfehlen, zuerst den Compiler auf eine neuere Version zu aktualisieren. –

Antwort

6

Nach this page on GCC's website, bereichsbasierte für nur in g erhältlich ++ 4.6 und höher, so dass Sie Ihren Code umwandeln müssen werden zu einer normalen for Schleife oder benutzen std::for_each oder etwas, oder den Compiler aktualisieren.

+0

in Ordnung, das würde Sinn machen. Ich überarbeite meinen Code und sehe, was passiert –

+0

Die normalen for-Schleifen kompiliert. Vielen Dank. –

+0

@PatMurray gut, froh, dass es funktioniert hat. Ich würde es wirklich schätzen, wenn Sie diese Antwort akzeptieren würden, da es Ihre Frage beantwortet, weil ich nur 5 Ruf von 200 heute mit nur ungefähr einer Stunde übrig bleibend bin :) –

Verwandte Themen