Visual Studio 2003 Win32 Konsolenanwendung



  • Die von VC++ angelegten Projekte verwenden standardmäßig vorkompilierte Header-Dateien, d.h. dass alle Header die du in "stdafx.h" inkludierst in eine Cachedatei vorkompliert werden, so dass der Kompilierungsvorgang beschleunigt wird.
    Wenn du die vorkompiliertten Header verwendest, musst du die stdafx.h in jeder deiner Quellecodedateien inkludieren, sonst kommt es zu der beschriebenen Fehlermeldung.
    Die Alternative ist, die Verwendung vorkompilierter Header unter Projektoptionen->Konfigurationseigenschaften->C/C++->Vorkompilierte Header abzuschalten.
    Ich würde die aber raten, sie zu verwenden, weil sie bei größeren Projekten den Kompilervorgang spürbar beschleunigen...

    Grüße,

    Martin

    PS: Das wäre eigentlich ein Kandidat für die FAQ



  • Hallo,
    EDIT

    mit dem letzten Tipp funktioniert es.

    Danke.



  • Dieser Thread wurde von Moderator/in CStoll aus dem Forum C++ in das Forum MFC (Visual C++) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Hallo. Also bei mir geht das nicht, wie es JimmydaMage gemeint hat. Bei mir gehts nur so, wie es Chenoa gesagt hat.

    Egal, ob nun mit stdafx oder ohne vorkompelierte Header, es funzt bei mir einfach nicht. Ich brauche immer das namespace std. Dieses Programm, so wie es goldie im ersten Beitrag dieses Themas geschrieben hat, müsste doch so normal laufen. Ich habe das Häckchen bei "vorkompelierte Header" bereits rausgemacht, und auch unter Projektoptionen->Konfigurationseigenschaften->C/C++->Vorkompilierte Header habe ich diese Ausgeschalten.

    Warum geht das bei mir trotzdem nicht? (oder nur mit namespace std)?

    Überhaupt gehen bei mir mit V C++ 2005 viele Programme nicht, sie sonst gehen müssten.

    Wenn ich das so mache

    #include "stdafx.h"
    #include <iostream>

    int main (void)
    {
    cout << "Hallo Welt";
    }

    kommt immer als Fehler:
    error C2065: 'cout': nichtdeklarierter Bezeichner

    Egal, ob ich nun vorkompelierte Header verwende oder nicht.



  • Also, ich habe da einen beitrag von mir aus einem anderen Forum nochmal reinkopiert und ein bischen umgeändert.

    Also bei mir geht das nicht, wie es JimmydaMage gesagt habt. Wenn ich eine Win32-Konsolenanwedung erstelle, die Eigenschaft "vorkompelierte Header benutzen" deaktiviere und folgenden Code benutze:

    #include <iostream>

    int main (void)
    {
    cout << "Hallo";
    }

    kommt folgender Fehler:
    error C2065: 'cout': nichtdeklarierter Bezeichner

    ------------------------

    Benutze ich nun folgenden Code mit der aktivierten Eigenschaft von "vorkompelierte Header benutzen:

    #include <iostream>
    #include "stdafx.h"

    int main (void)
    {
    cout << "Hallo";
    }

    kommt der selbe Fehler:
    C2065: 'cout': nichtdeklarierter Bezeichner.

    Also stimmt das, was Rika gesagt hat entweder nicht, oder meine VC Version ist kaputt. Oder mein ganzer PC.

    In vielen Forum steht, dass das entweder mit dem ausschalten der Eigenschaft "vorkompelierte verwenden" oder mit dem einfügen der "stdafx.h" geht. Bei mir irgendwie nicht.

    Bei mir geht es nur so:

    #include <iostream>
    using namespace std;

    int main (void)
    {
    cout << "Hallo";
    cin.get();
    }

    mit deaktivierter Eigenschaft "vorkompelierte Header verwenden".

    Wenn ich den selben Code mit dieser Eigenschaft mache und die stdafx.h einfüge, geht es wieder nicht.

    Warum funktioniert das bei mir nur ohne vorkompelierte Header? Warum geht es nur mit "namespace"?
    Warum schließt sich das KonsolenFenster von selber, wenn ich kein cin.get mache?

    Hart finde ich, dass das sonst bei anderen Editoren funktioniert. Nur bei VC nicht. Gibt es sonst noch Unterschiede, die bei VC anders sind? Sachen, die man anders coden muss?



  • cout liegt im Namensraum std ...
    das heißt entweder:
    cout mittels using namespace std; oder using std::cout; global bekannt machen
    oder über die NAmensraumbezeichnung aufrufen:
    std::cout << "mein text" << std::endl;

    /Edit:
    das std brauchst du nur dann nicht, wenn du den veralteten Header <iostream.h> statt <iostream> einbindest, aber davon sei abgeraten^^



  • Danke. Hat es sonst noch vom Coden her Unterschiede zwischen VC++ 2005 und den anderem Zeugs wie Borland oder DevC++?



  • Lord Holy schrieb:

    Danke. Hat es sonst noch vom Coden her Unterschiede zwischen VC++ 2005 und den anderem Zeugs wie Borland oder DevC++?

    hmm das mit dem cout sollte eigtl. kein Unterschied sein 😉



  • Nach C++-Standard liegen die Funktionen, die dem Standard angehören im Namensraum std.
    Das ist der Grund warum du, wenn du die Funktionen aus dem Standard nutzen willst, entweder std:: vor den Funktionsnamen setzen musst(womit er nicht im globalen Namensraum die Funktion vermutet) oder die using-Direktive d.h. using std::cout; oder direkt alle Funktion aus dem Namensraum.
    Korrekt ist also folgendes:

    #include <iostream>
    
    int main()
    {
        std::cout << "Hallo Welt!" << std::endl; // "Hallo Welt!\n" sofort ausgeben
        std::cin.get(); // auf ein Zeichen warten, damit das Programm nicht direkt schließt.
    }
    

    Das du keinen Wert zurückgeben musst, obwohl die Funktion "main" ja den Rückgabewert int hat, liegt ebenfalls am Standard. Es wird automatisch return 0; angenommen. Wenn ein Fehler aufgetreten ist, solltest du d.h. bsw. return 1 zurückgeben. return 0 steht für "successed".

    #include <iostream>
    
    #using std::cout;
    #using std::cin;
    
    int main()
    {
        cout << "Hallo Welt!" << std::endl;
        cin.get();
    }
    

    und

    #include <iostream>
    
    #using namespace std;
    int main()
    {
        cout << "Hallo Welt!" << endl;
        cin.get();
    }
    

    ...
    }
    }



  • Braucht man das "endl" unbedingt? Sorry, ich weiß, dass ich viel Scheiße frage. Aber ich kenne ja C schon. Und ich habe ein Buch, in dem C++ mit Borland besprochen wird. Deshalb liegt nun mein Weltbild ganz schön auf dem Kopf.

    Und was sind sonst noch die Unterschiede beim coden zwischen VC++ und Borland. DevC++ und Co.? Ich finde es immer kacke, wenn man was aus einem Lehrbuch gelernt hat und dann die Dinge nicht gehen, weil man mit einem andereren Compiler oder so arbeitet. Gibt es dann noch sowas wie einen C++-Standart, wenn es eh immer anders ist?



  • Du solltest von Borland und DevC++ eigentlich die Finger lassen. G++ und Visual C++ 2005 halten sich (zu 99% ;)) an den Standard!

    Es gibt einen Standard ... kann man auch einsehen ...

    Warum "std::endl"? Es schreibt zum einen ein "\n" (Newline) in den Stream und zum anderen wird der Stream direkt geleert bzw. ausgegeben (std::flush + '\n' also)

    Funktionserläuterungen findest du u.a. auf www.cppreference.com


Anmelden zum Antworten