1000 und 1 Fehler.

Philipp9494

Erfahrenes Mitglied
Hallo.

Nun hier mal ein Testcode:
Code:
#include <iostream>

using namespace std;

int main() {
	cout<<"test";
	return 0;
}

wenn ich den aber versuche zu Kompilieren dann kommen "ein paar" Fehler:
1>------ Erstellen gestartet: Projekt: test, Konfiguration: Debug Win32 ------
1>Kompilieren...
1>main.cpp
1>c:\program files\microsoft visual studio 9.0\vc\include\fstream(17) : error C2143: Syntaxfehler: Es fehlt ';' vor '*'
1>c:\program files\microsoft visual studio 9.0\vc\include\fstream(17) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>c:\program files\microsoft visual studio 9.0\vc\include\fstream(17) : error C2653: 'ios_base': Keine Klasse oder Namespace
1>c:\program files\microsoft visual studio 9.0\vc\include\fstream(17) : error C2061: Syntaxfehler: Bezeichner 'openmode'
1>c:\program files\microsoft visual studio 9.0\vc\include\fstream(17) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>c:\program files\microsoft visual studio 9.0\vc\include\fstream(21) : error C2061: Syntaxfehler: Bezeichner '_iobuf'
1>c:\program files\microsoft visual studio 9.0\vc\include\fstream(23) : error C2061: Syntaxfehler: Bezeichner '_iobuf'

[...]

1>c:\program files\microsoft visual studio 9.0\vc\include\fstream(361) : error C2065: 'char_traits': nichtdeklarierter Bezeichner
1>c:\program files\microsoft visual studio 9.0\vc\include\fstream(361) : fatal error C1003: Mehr als 100 Fehler gefunden; Kompilierung wird abgebrochen.
1>Das Buildprotokoll wurde unter "file://c:\test\test\Debug\BuildLog.htm" gespeichert.
1>test - 130 Fehler, 9 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

Natürlich hab ich schon versucht die Datei von einem anderen Rechner wieder zurückzukopieren, denn vl. hab ich sie ja unabsichtlich bearbeitet, aber das nutzt auch nichts.
Es hat aber auch schon gegeben, dass nicht fstream fehlerhaft war, sondern auch iostream und string..

Weiters benütze ich Visual Studios 9. Express.

MfG
Philipp
 
Das sind keine Fehler in deinem Quellcode, sondern in der Entwicklungsumgebung, da ist irgendwas falsch konfiguriert, du kannst versuchen das von Hand zu finden, aber ich würde zur Neuinstallation raten.
 
VC++ möchte immer z.B. den Header stdfafx.h haben.

So kann ich es fehlerfrei mit dem VC++ 2008 kompilieren (Win32 -> Konsolenanwendung)

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

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	cout << "Test";
	return 0;
}
 
Ja das sind natürlich Qualifizierte Antworten!

C++:
#include "stdafx.h"
#include <iostream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	cout << "Test";
	return 0;
}
Ekelhafter Code, weil du da nix von verstanden hast!

Also stdafx.h wird von MS VC++ angelegt, wenn man es nicht ausdrücklich im Wizard abwählt. Nennt sich Precompiled Headerfiles. Man bindet alle Bibliotheken usw. in einem Header ein um die Compilerzeit zu verkürzen. (vgl. z.B. http://en.wikipedia.org/wiki/Precompiled_header)

In stdafx.h bindet MS VC++ den Header <tchar.h>, der zu den im Standard enthaltenen Einstiegspunkten
C++:
int main()
int main(int argc, char* argv[])
und den UNICODE Einstiegspunkten
C++:
int wmain()
int wmain(int argc, wchar_t** argv)
noch die TCHAR alternativen bereitstellt.
C++:
int _tmain()
int _tmain(int argc, _TCHAR* argv[])
. Bei allen Funktionen von MS, die durch T gekennzeichnet sind, handelt es sich um Makros, die je nach Compilereinstellung (UNICODE, MB) zur MB oder UNICODE-Version aufgelöst werden.

Seid der 2005er VC-Version, ist standardmäßig UNICODE bei den Compilereinstellungen eingestellt.

Demnach wird das _tmain zu wmain aufgelöst.
_TCHAR ist z.B. dann auch wchar_t, sonst char.

Um deinen Code dann brauchbar zu machen:
C++:
#include "stdafx.h"

#if _UNICODE
#define cout std::wcout
#define cin std::wcin
#else // _MultiByte
#define cout std::cout
#define cin std::cin
##endif // _UNICODE

int _tmain(int argc, _TCHAR* argv[])
{
	cout << _T("Hallo Welt!") << std::endl;
}
So wäre es dann korrekt :D

Aber sooo wenig hält sich der VC++ auch nciht an den Standard, dass ein
C++:
#include <iostream> int main() { std::cout << "Hello World!" << std::endl; }
nicht
compilierbar wäre. (Wenn Precompiled Headerfiles abgestellt sind. Sonst fehlt da jetzt "stdafx.h" ;) )

Also zum Ausgangsproblem: Neuinstallation von VC++9
 
Danke für die Erklärung :) So genau wußte ich das tatsächlich nicht, aber ich bin ja auch nicht hier, weil ich perfekt alles beherrsche, sondern weil ich dazu lernen möchte ;)

Neu installieren braucht man aber nichts, wenn man die Pre-Compiled Header nicht verwenden möchte, kann man bei der Projekterstellung dies durch einen Klick verhindern.

Dann funktioniert wahrlich folgendes:

C++:
#include <iostream>

using namespace std;

int main()
{
	cout << "Test" << endl;
}
 
Dann SOLLTE das funktionieren ... hab ich ja auch geschrieben ;)
Aber sooo wenig hält sich der VC++ auch nciht an den Standard, dass ein
C++:
#include <iostream> int main() { std::cout << "Hello World!" << std::endl; }
nicht compilierbar wäre. (Wenn Precompiled Headerfiles abgestellt sind. Sonst fehlt da jetzt "stdafx.h" )
;)

Aber das der Standardheader himself Fehler drin hat ... oder hast du vllt. irgendwo eine Klasse/Struktur und da ein Simikolon vergessen odg.?
 
Zurück