<iostream.h> Problem
-
Das, was ihr da in der Schule lernt, ist schreckliches, praehistorisches C++.
Ersetze <iostream.h> durch <iostream> und ziehe vor main die folgende Zeile ein, dann sollte es kompilieren:using namespace std;Hinweis: Nur weil es kompiliert, ist es noch nicht guter Code, sollte aber eh klar sein.
-
Also ich hab das vorher auch schon versucht wurde in vielen Threads so erwähnt aber irgendwie rührt sich nix, oder ich bin einfach nur beschränkt.
SO sieht es jetzt aus:
#include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { for (int i=1; i<5; i++) { int j=i; switch(j) { case 1: j+=3; break; case 2: j=3; case 3: j++; break; default:; } std::cout << j << std::endl; } return 0; }Es kommt aber immer noch die selbe Fehler Meldung.
1>c:\users\xx\documents\visual studio 2005\projects\wasgehtab\wasgehtab\wasgehtab.cpp(20) : error C2065: 'cout' : undeclared identifier
1>c:\users\xx\documents\visual studio 2005\projects\wasgehtab\wasgehtab\wasgehtab.cpp(20) : error C2065: 'endl' : undeclared identifierSorry ich kenn mich echt nicht aus.
-
Wie sieht stdafx.h aus?
-
Die sieht so aus:
// stdafx.h : include file for standard system include files, // or project specific include files that are used frequently, but // are changed infrequently // #pragma once #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers #include <stdio.h> #include <tchar.h> #include <iostream> // TODO: reference additional headers your program requires here
-
Kid Pharell schrieb:
Es kommt aber immer noch die selbe Fehler Meldung.
1>c:\users\xx\documents\visual studio 2005\projects\wasgehtab\wasgehtab\wasgehtab.cpp(20) : error C2065: 'cout' : undeclared identifier
1>c:\users\xx\documents\visual studio 2005\projects\wasgehtab\wasgehtab\wasgehtab.cpp(20) : error C2065: 'endl' : undeclared identifierSorry ich kenn mich echt nicht aus.
In Zeile 20 steht in deinem Code return, aber nichts mit cout oder endl. Du übersetzt eine andere Datei.
-
manni66 schrieb:
Kid Pharell schrieb:
Es kommt aber immer noch die selbe Fehler Meldung.
1>c:\users\xx\documents\visual studio 2005\projects\wasgehtab\wasgehtab\wasgehtab.cpp(20) : error C2065: 'cout' : undeclared identifier
1>c:\users\xx\documents\visual studio 2005\projects\wasgehtab\wasgehtab\wasgehtab.cpp(20) : error C2065: 'endl' : undeclared identifierSorry ich kenn mich echt nicht aus.
In Zeile 20 steht in deinem Code return, aber nichts mit cout oder endl. Du übersetzt eine andere Datei.
Ja stimmt, ich hatte oberhalb noch paar Zeilen (Text) stehen in //grün deshalb hat das nicht ganz gepasst.
Ich habs jetzt wieder versucht zu starten.
Und auf einmal kommt so etwas raus.
1>------ Build started: Project: WasGehtAb, Configuration: Debug Win32 ------
1>Compiling...
1>WasGehtAb.cpp
1>Linking...
1>WasGehtAb.obj : error LNK2005: _wmain already defined in stdafx.obj
1>C:\Users\xx\Documents\Visual Studio 2005\Projects\WasGehtAb\Debug\WasGehtAb.exe : fatal error LNK1169: one or more multiply defined symbols found
1>Build log was saved at "file://c:\Users\xx\Documents\Visual Studio 2005\Projects\WasGehtAb\WasGehtAb\Debug\BuildLog.htm"
1>WasGehtAb - 2 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
-
Ok Problem geklärt ich weiß nicht wieso, aber es funktioniert auf einmal.
Hab alles geschlossen alles 1 zu 1 in eine neue Datei kopiert und auf einmal funktioniert das.
Aber ich verstehe immer noch nicht warum ich das .h bei iostream.h weg machen musste uns wurde das immer mit .h gezeigt und so hat es in den Übungsstunden auch immer funktioniert.
Und was bedeutet das std:: ?
Trotzdem erstmal großes dankeschön an die Community hier, sehr schnelle Antworten bekommen, gutes Klima hier, ich dachte ich würde jetzt gesteinigt werden.

Hier alles was letzendlich drinn steht:
#include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { for (int i=1; i<5; i++) { int j=i; switch(j) { case 1: j+=3; break; case 2: j=3; case 3: j++; break; default:; } std::cout << j << std::endl; } return 0; }In der stdafx.h hab ich nur das stehen, nix daran geändert.
#pragma once #define WIN32_LEAN_AND_MEAN #include <stdio.h> #include <tchar.h>
-
Kid Pharell schrieb:
Aber ich verstehe immer noch nicht warum ich das .h bei iostream.h weg machen musste uns wurde das immer mit .h gezeigt und so hat es in den Übungsstunden auch immer funktioniert.
Wie schon angemerkt wurde, lernt ihr prähistorisches C++. Wirklich wortwörtlich prähistorisch, denn so richtig los ging es mit C++ im Jahr 1998 (immerhin 15 Jahre her!). Davor war so ein bisschen Wildwuchs, in dem auch Varianten wie iostream.h erlaubt waren, seither ist alles streng vorgegeben. Natürlich hält sich dein "modernes" VS 2005 an diese Vorgaben* und erkennt deswegen iostream.h nicht. Ihr lernt in der Schule also eine Sprache, die so alt ist, dass sie mittlerweile ausgestorben ist. Eure Software ist ebenfalls aus diesem vergangenen Zeitalter.
Das ist so als wenn man im Deutschunterricht Mittelhochdeutsch auf Pergamentrollen schreiben würde. Bringt einem später bestimmt sehr viel :p .
Und was bedeutet das std:: ?
Auch etwas, was es vor 1998 nicht überall gab. Das wäre eigentlich Aufgabe des Lehrers das zu erklären, aber ich wette, er weiß das selber nicht.
Es ist ein sogenannter Namespace. Das heißt, cout heißt eigentlich mit vollem Namen std::cout. Alle Funktionen und Objekte der Standardbibliothek sind im (reservierten) Namespace std. So vermeidet man Namenskonflikte. Mit dem
usingkann man den gesamten oder Teile eines Namensraumes in einem anderen Namensraum (hier einfach der globale Raum, außerhalb aller Namespaces) bekannt machen. Dann kann man sich die Namensraumangabe sparen und wieder cout schreiben statt std::cout, hat dafür aber wieder das Risiko von Namenskonflikten.*: Was ist los mit den Leuten? VS Express ist Freeware! Es gibt eine Version von 2012! Kein Anfänger wird jemals die Features vermissen, die in der Expressversion fehlen.
-
SeppJ schrieb:
*: Was ist los mit den Leuten? VS Express ist Freeware! Es gibt eine Version von 2012! Kein Anfänger wird jemals die Features vermissen, die in der Expressversion fehlen.
Du würdest dich wundern, was manche Lehrer/Dozenten so alles nutzen.
Wir mussten über die Konsole compilieren und im Notepad coden. Richtig schön oldschool
-
anti-freak schrieb:
Wir mussten über die Konsole compilieren und im Notepad coden. Richtig schön oldschool

Du glaubst nicht, wie viele Leute das heute noch tun (wenn auch mit anderem Editor) :p
-
Mag ja auch durchaus seine Berechtigung haben, aber ist es denn wirklich sinnvoll das im Unterricht zu nutzen, statt das eben jeder auf seinen grünen Pfeil drückt?
Du glaubst nicht, wie oft die Frage kam "Wie kann ich das nochmal compilieren? habe die Konsole geschlossen!"
-
anti-freak schrieb:
Wir mussten über die Konsole compilieren und im Notepad coden. Richtig schön oldschool

Das finde ich sogar einigermaßen sinnvoll (von Hand compilieren, nicht notepad
). Ich finde jedenfalls, dass man damit mal sofort sieht, wie der Prozess abläuft und kann dabei sehr schnell vieles lernen, was andere vor unlösbare Probleme stellt (Linkerfehler, was sind das?).Aber wenn man schon eine IDE benutzt, warum dann keine aktuelle?
Das gilt natürlich noch viel mehr für den Compiler. Da hat sich in den letzten Jahren ungeheuer viel getan, was selbst einem Anfänger unmittelbar nützt. Und wenn es nur bessere Fehlermeldungen sind.
-
Was habt ihr gegen Notepad?
Damit hab ich schon ganze Webseiten geschrieben! :p
-
Nathan schrieb:
Was habt ihr gegen Notepad?
Damit hab ich schon ganze Webseiten geschrieben! :pWenn man mit dem vi nicht umgehen kann, muss man halt zu solchen Klicktools greifen

-
Kann man damit eigentlich inzwischen Dateien > 64 kB bearbeiten?

-
Also bie 84 MB schmiert der ab.
