Einfaches CPP Projekt in VS.NET erstellen?



  • Hallo.

    Ich komme aus der Java Ecke und bin in der Sprache schon recht routiniert. Da mir aber die Möglichkeiten von Java zu limitiert sind, möchte ich nun C++ lernen. Glücklicherweise bekomm ich als Studi VS.NET umsonst und möchte nun ein einfaches "HelloWorld" Projekt erstellen. Nur... wie? Wenn ich z.B. ein Win32-Kosolen Projekt verwende, meckert das IDE schon beim einfachsten include
    mit dem Fehler

    HelloWorld.cpp(7): error C2065: 'cout': nichtdeklarierter Bezeichner

    #include <iostream.h>
    #include "stdafx.h"
    
    int _tmain(int argc, _TCHAR* argv[]) {
    	cout << "Hello, world!";
    	return 0;
    }
    

    Was mache ich falsch? Schließlich ist die benötigte Header-Datei ja eingebunden.

    Danke im voraus,

    Wan-Hi



  • OK, ich habe gerade herausgefunden, daß es im include Verzeichnis von VC keine iostream.h Datei gibt, d.h. so oder so funktioniert das ganze Unterfangen mittels cout wohl nicht. Nun werfen sich mir aber weitere Fragen auf:

    • Wieso fehlt diese Header Datei?
    • Wäre der Code formell richtig gewesen? (Es existiert nämlich eine stdafx.h Datei, wo seltsamerweise nur Standard Headers eingebunden werden.)
    • Wofür dient stdafx.cpp? Da die Datei wenig Sinn hat, könnte ich doch den Code einfach unter meinem HelloWorld.cpp einbinden...

    Entschuldigt meine dummen Fragen. Nur sind das Umstände, die aus Java nicht bekannt sind.

    Gruß

    Wan-Hi



  • Hallo,

    wenn du "modern" programmieren willst (und der neueste VS.NET-Compiler ist modern in diesem Sinne, der Standard wird inzwischen sehr gut umgesetzt), dann achte bei Programmbeispielen darauf, daß die C++-Standard-Header ohne .h-Endung eingebunden werden (das andere wäre ein veralteter Header, der wohl gar nicht mehr mit ausgeliefert wird in VS.NET), außerdem liegt cout im namespace std (deswegen die Schreibweise unten):

    #include "stdafx.h"
    #include <iostream>
    
    int _tmain(int argc, _TCHAR* argv[]) {
        std::cout << "Hello, world!";
        return 0;
    }
    

    die Datei stdafx.cpp dient nur dazu, die in der MFC/Windows-Programmierung häufig benötigten Header zu bündeln, und zu kompilieren. Das hängt auch mit einem Mechanismus zusammen, der sich "vorkompilierte Headerdateien" nennt (ermöglicht schnelleres Kompilieren der Anwendung), und deshalb wird diese Datei immer automatisch eingebunden, damit die "vorkompilierten Header" erstellt und benutzt werden können (man kann auch darauf verzichten, dann muß man auch nicht stdafx.h/stdafx.cpp benutzen und kann dann wirklich alles in eine Datei schreiben, für dein einfaches Beispiel würdest du ja wirklich nur die <iostream> benötigen).

    MfG



  • Vielen Dank für die Hilfe. Ich hatte mir extra einen dicken Schinken als Lektüre zugelegt, der sehr vielversprechend zu sein schien. C++ Das Grundlagenbuch von Gerhard Willms / Data Becker. Seltsamerweise wird dort nirgends erwähnt, daß neuerdings die std Headers ohne .h notiert werden. Als Compiler verwendete der Author den GCC.

    Ist das normal, daß sich Compiler in der Hinsicht so stark unterscheiden, daß sogar Syntax-Konventionen abweichen?

    Eine andere Frage die mich beschäftigt: Warum muß ich extra "std" als Namespace angeben? Sollten Elemente von ISO C++ nicht automatisch nutzbar sein? (Vielleicht eine dumme Frage, aber ich versuche gerade zu verstehen, wie der Hase bei C++ langläuft. Bei Java ist ja alles restriktiver genormt.)

    Gruß.

    Wan-Hi



  • Ob dieses Buch gut ist kann ich nicht sagen. Wenn du unter Linux einen Header mit ".h" einbindest dann sagt dir der gcc/g++ da es ein alter Header ist. Das lieht daran das diese Header ein Kommentar drinstehen haben und bei c++ einfach durch den g++ ausgeben. Nicht verwirrt sein. Der gcc ist der Kompiler. Dieser verwendet aber bei c++ den g++. Ist alles IMHO durch Scripts geregelt.

    Bezügl. namespace: Diese Methode befinden sich nunmal im Namespace std. Um diese verwenden zu können kannst du zu beginn (also vor der main() )auch

    using namespace std;
    

    schreiben.

    Auch wenn du VC++ verwendest gehören Fragen welche die Sprache ansich betreffen ins Forum "C++".



  • Dieser Thread wurde von Moderator/in Unix-Tom aus dem Forum MFC mit dem Visual C++ in das Forum C++ verschoben.

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

    Dieses Posting wurde automatisch erzeugt.



  • die Erfahrung muss anscheinend jeder machen, der mit C++ anfängt. Ging mir auch so. Hatte schon code, der auf billy's visualStudio wunderbar lief und bei einem Borland-Compiler voll in die Hose ging (und andersherum) 😃 Bei Borlang existieren die einzubindenden Präprozessordirektiven mit .h noch und haben manchmal sehr seltsame Namen. same procedure as everytime: kompatibel, was ist das?
    Manchmal echt frustrierend, wenn man da an einem Fehler sucht und es einfach nur an der Umgebung liegt.



  • Die Tatsache, daß IDEs sogar die Syntax beinflussen, macht einen dann also noch abhängiger vom gewählten Produkt. Ist ja schlimm.

    Andere Frage: Gibt es eine API die Bäume und ArrayListen bereits zur Verfügung stellt? Ich denke da an ein Pendant zu java.util.ArrayList/Vector/LinkedList!

    Danke,

    Wan-Hi



  • nein, wenn man richtig programmiert ist man absolut nicht ide abhängig,mit #include<iostream> kommt man heutzutage überall durch.

    zu der frage:
    array->#include<vector>
    listen->#include<list>
    bäume->imho #include<map>/#include<multimap>/#include<set>/#include<multiset> da wirds aufjedenfall als baumform gespeichert(mit minimaler höhe), zugriff erhält man dann durch einen eindeutigen bezeichner,bei map/multimap ist er beliebig/bei set/multiset ist er int.

    aber code, der nen echten baum auswirft gibts in c++ leider standardmäßig nicht



  • pervers.

    Vorcompilierte Header, iostream.h, unicode in einem Consoleprogramm (Versucht mal paar Japanische Zeichen in der console anzuzeigen :D), _tmain.

    Darüber kann man echt nur noch heulen...



  • ja, ich bekomm schon tränen in den augen. 😡



  • nix da schrieb:

    pervers.

    Vorcompilierte Header, iostream.h, unicode in einem Consoleprogramm (Versucht mal paar Japanische Zeichen in der console anzuzeigen :D), _tmain.

    Darüber kann man echt nur noch heulen...

    Wo liegt das Problem? Auf ner japanischen Konsole schaffst du es sehrwhol japanische Zeichen anzuzeigen.

    👎

    MfG SideWinder



  • SideWinder
    1. Redet er Japanisch?
    2. Sowas macht doch keiner, einen UNICODE-String mit cout ausgeben. Den müsste man dazu erstmal erweitern.


Anmelden zum Antworten