VS.NET 'kennt' cin und cout nicht?!



  • Hallo,

    Ich hab ein kleines Problem mit VS.NET 2003 auf Win XP SP2.
    Genau genommen folgende Version.
    Microsoft Visual C++ .NET 69536-335-0000007-18012

    Nun bekomme ich mein Compilieren folgende Fehler beim Einsatz von cin/cout.

    iostream.h bzw. stdlib.h bzw. stdio.h hab ich includet.

    error C3861: 'cout': Bezeichner wurde auch mit einer argumentbezogenen Suche nicht gefunden
    

    bzw.

    error C3861: 'cin': Bezeichner wurde auch mit einer argumentbezogenen Suche nicht gefunden
    

    Vielleicht ist noch Interesannt das nach der Installation von VS.NET beim ersten Compilieren die iostream.h nicht gefunden wurde, obwohl Sie in /src und /include lag...sowohl mit <> als auch mit "" im include...

    erst nachdem ich die iostream mehrmals umbenannt hatte (mit *.h oder ohne) wurde sie gefunden...

    Hat da jmd eine Idee wo das Problem liegen könnte?



  • du musst

    #include <iostream>
    using namespace std;
    

    benutzen , dann gehts



  • Du benutzt uralte Bibliotheken, die es garnicht mehr in C++ gibt. Soll heißen, das VC++7.1 dir korrekterweise Fehlermeldungen ausspuckt, da du fälschlicherweise unbekannte Funktionen benutzt.

    Schau dir doch bitte unter www.cppreference.com die aktuelle Bibliothek an. Hauptsächlich haben sich die Header-Dateien geändert (ohne .h) und die Standard-Library liegt im Namespace std.

    Entweder using namespace benutzen oder den Namespace immer davor schreiben:

    std::cout
    


  • Damit du dich nicht durch so viel Material kämpfen musst, fass ich es mal zusammen:

    -Alle Header von c++ haben weiterhin den gleichen Namen, aber ohne dem .h am Ende
    und befinden sich im Namensraum std (Namensräume wurden neu in den Standard
    aufgenommen und um alten Code weiterhin übersetzen zu können hat man die neuen Namen genommen)

    -Die C-Headerdateien für C++ haben ebenfalls kein .h mehr am Ende (liegen also auch im Namensraum std)
    und haben ein c vorangestellt (Beispiel: stdio.h wird zu cstdio)

    -Ein Namensraum sieht so aus namespace foobar { /*Hier alles was rein soll*/}
    Um auf ein Element in einem Namensraum zuzugreifen benutzt man den Scope-Operator ::
    (Beispiel: std::cout << "hallo welt\n"; )
    Man kann einen Namensraum in den globalen Namensraum (der sieht so aus: ::foobar())
    laden, dazu benutzt man die using-Direktive, z.B. using namespace std;
    lädt den gesamten Namensraum std in den globalen Namensraum. Möchte man nur einzelne
    Elemente in einen anderen Namensraum laden verwendet man folgendes using std::cout;
    fortan kann man statt std::cout einfach cout schreiben.

    Die Elemente/Namensräume werden immer dorthin geladen wo die using-Direktive steht,
    also man kann damit auch von Namensraum xyz in den Namensraum foo laden und nicht nur
    in den globalen Namensraum.


Log in to reply