Problem bei Container-Verwendung (stdlib)



  • Hallo zusammen!

    Ich habe gerade ein Problem beim Kompilieren eines Programms, das sich nach einiger Analyse auf ein sehr elementares Problem mit der Stdlib reduziert.

    Beim Testprogramm:

    #include <vector>
    int main(){
    	vector<int> eee (999);
    	return 0;
    }
    

    lamentiert der g++-Compiler

    test.cc:7: error: ‘vector’ was not declared in this scope
    test.cc:7: error: expected primary-expression before ‘int’
    test.cc:7: error: expected `;' before ‘int’
    

    - also schlichtweg genau das, was auch ohne den include-Befehl zu erwarten ist und auch herauskommt.
    (Zeile 7 ist diejenige die mit "vector<int>" beginnt.)

    Das Problem bleibt analog bestehen, wenn ich
    a) "vector" durch "list" ersetze,
    b) "#include <stdlib.h>" anstelle "#include <vector>" setzte.

    Das heißt doch, der Compiler findet die Deklaration der Standard-Container nicht.
    Andererseits findet er offenbar die Stdlib, sonst ergäbe das Experiment schließlich eine andere Fehlermeldung.

    Ahnt jemand von Euch, was hier passiert und was ich besser machen kann?

    Vielen Dank im Voraus!



  • tollelege schrieb:

    #include <vector>
    int main(){
    	vector<int> eee (999);
    	return 0;
    }
    

    Der Code ist laut Standard falsch!
    Du suchst:

    #include <vector>
    int main()
    {
      std::vector<int> foo(123);
      return 0;
    }
    

    MfG, EOutOfResources



  • Tatsächlich, vielen Dank!

    Frage am Rande: Ich dachte, auf Vector, List usw. könne ich auch zugreifen, wenn ich "stdlib.h" inkludiere statt "vector". Wieso funktioniert das nicht? Was liefert mir stdlib.h denn allein (ohne weitere includes)?



  • tollelege schrieb:

    Was liefert mir stdlib.h denn allein (ohne weitere includes)?

    Naja, in C++ sollte es <cstdlib> heissen.
    Und er bringt das.





  • Vielen Dank Euch beiden.



  • tollelege schrieb:

    Frage am Rande: Ich dachte, auf Vector, List usw. könne ich auch zugreifen, wenn ich "stdlib.h" inkludiere statt "vector". Wieso funktioniert das nicht? Was liefert mir stdlib.h denn allein (ohne weitere includes)?

    Grundsätzlich:

    Vom C++ Standard her kannst du nur selten annehmen, das ein Header einen anderen automatisch mit inkludiert, und dies bei einer anderer Umsetzung der Standardbibliothek genauso ist.

    Des weiteren sind Header die alle anderen einer Bibliothek automatisch umfassen, auch von der Compilezeit her problematisch, und man sollte es lieber nicht mit so etwas übertreiben. Daher gibt es auch keinen vorgegebenen Header, der die gesamte C++ Standardbibliothek umfasst.

    Zudem gibt es im C++ Standard keine Headerendung, und alles liegt im Namensraum std. Wenn du in einem C++ Buch oder Skript eine Headerendung für einen Header der Standardbibliothek siehst, so ist das Buch mit hoher Sicherheit für die Runde Papierablage (=> Papierkorb) geeignet und inhaltlich veraltet.



  • Übrigens, um asc zu ergänzen, solltest Du auch bei Deinen eigenen Codings immer alle benötigten Header inkludieren ohne Dich darauf zu verlassen, dass Header A den Header B schon einfügt. Wenn A B nämlich nicht mehr braucht, hast Du plötzlich in deiner inkludierenden Datei dein B nicht mehr. Sehr unnötig.


Anmelden zum Antworten