namespace std und infile stream



  • Hallo,

    ich hab ein Problem, das sich auf zwei verschiedene Arte lösen ließe. eine gute antwort auf eine meiner zwei fragen würde mir weiterhelfen.

    Die weniger wichtige Frage:

    1. mein programm verwendet die complex<double> bibliothek, daher muß ich anscheinend den namespace std verwenden, obwohl man das in headern nicht machen sollte (?!). (Ohne using namespace gibts die Fehlermeldung "Undeclared identifier.) Ich kann vielleicht darauf verzichten, indem ich das std:: vor so gut wie jeden befehl setze- treib ich damit die Laufzeit nicht ziemlich hinauf?
      (warum die Richtlinie, die das inkludieren von namespaces verbietet? Fehlermeldung gibts ja nicht.) Bevor ich außerdem den ganzen Code durchgehe und das Programm modifiziere, würd ich gern wissen, ob ich mir davon überhaupt was versprechen kann.

    Das eigentliche Problem ist:
    2) Ich hab eine Klasse für eine gemütliche Ein-/Ausgabeumleitung, die nur ohne Verwendung des Namespaces std funktioniert, genauer beschwert sich der Compiler nach Verwendung von std über die Zeile

    ifstream fin;
    

    als mehrdeutig. spezifiziert man mittels

    std::ifstream fin;
    

    bekommt man die Fehlermeldung
    'fin' uses undefined class 'basic_ifstream<char,struct std::char_traits<char> >'

    Welchen Befehl brauch ich also, um im namespace std einen infile stream zu konstruieren? Verschiedene Tutorials im Internet geben den obigen Befehl als korrekt an, aber das funktioniert nicht. Ich arbeite mit dem Microsoft Visual Studio 6.0.
    Versucht man die - an sich funktionierende - Ein-/Ausgabe-Bibliothek in ein Programm einzubinden, in dem die "using namespace std;" verwendet wird, ist im übrigen auch Essig (zur Zeit die Fehlermeldung eines "intern compiler error", die ich bislang noch nicht hatte, aber es geht anscheinend sonst auch schief.)

    Vielen Dank im voraus.



  • charms schrieb:

    1. mein programm verwendet die complex<double> bibliothek, daher muß ich anscheinend den namespace std verwenden, obwohl man das in headern nicht machen sollte (?!).

    ! 😉

    (Ohne using namespace gibts die Fehlermeldung "Undeclared identifier.) Ich kann vielleicht darauf verzichten, indem ich das std:: vor so gut wie jeden befehl setze- treib ich damit die Laufzeit nicht ziemlich hinauf?

    Nein. Das hat mir der Geschwindigkeit deines Programmes gar nichts zu tun. Genauso wie es egal ist ob du eine Variable 'int complex' oder 'int std_complex' nennst.

    (warum die Richtlinie, die das inkludieren von namespaces verbietet? Fehlermeldung gibts ja nicht.)

    Weil dann in jeder Sourcecode Datei, die den Header inkludiert auch der Namensraum aufgelöst ist. Vielleicht willst du das ja in einer Datei nicht und dann hast du ein Problem. Deswegen sollte man darauf verzichten.

    Zu deinem Problem:
    Welche Header hast du für ifstream eingebunden? Es sollte

    #include <fstream>
    

    sein.



  • hey super, das scheint zu funktionieren.! vielen dank!

    lg, charms


Anmelden zum Antworten