[C++] "`main' must return `int`" und noch mehr

fanste

Erfahrenes Mitglied
Hi,

Ich bin momentan dabei mir C++ beizubringen.
Ich scheitere aber schon an dem simplen Versuch diesen Code zum laufen zu bringen.
C++:
#include <iostream.h>
void main()
{
  cout << "Hello World!" << endl;
}
Dieser Code ist von der Seite http://www.red-inferno.de/ , welche hier unter der Linkliste stand.
Hier bekomme ich folgende Meldungen:
Code:
1 C:\Programme\Dev-Cpp\include\c++\3.4.2\backward\iostream.h:31,               from main.cpp In file included from C:/Programme/Dev-Cpp/include/c++/3.4.2/backward/iostream.h:31,               from main.cpp 
1 C:\Dokumente und Einstellungen\grubi\Desktop\C++\main.cpp                  from main.cpp 
32:2 C:\Programme\Dev-Cpp\include\c++\3.4.2\backward\backward_warning.h #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated. 
4 C:\Dokumente und Einstellungen\grubi\Desktop\C++\main.cpp `main' must return `int' 
 C:\Dokumente und Einstellungen\grubi\Desktop\C++\Makefile.win [Build Error]  [main.o] Error 1


Nach etwas rumprobiererei, hab ich es dann so geschafft.
C++:
#include <iostream>
using namespace std;
main()
{
   cout << "Hello World!" << endl;
}

Aber so kann das ja irgendwie nicht ganz sein.
Ich hab das .h und das void weglassen müssen. Zudem hab ich noch "using namespace std;" dazu schreiben müssen.

Woran liegt das, dass die Tutorial-Version von meiner funktionierenden so stark abweicht?

Ich verwende übrigends das Programm Dev-C++ 4.9.9.2

Ich hoffe auf eure Hilfe.

mb fanste
 
Hi

Du solltest using namespace std; immer dazu schreiben wenn du eine cout Ausgabe machst.
Ansonsten müsstest du immer vor cout "std::" schreiben das wäre zimlich umständlich wenn man viele cout Ausgaben hat

z.B:

#include <iostream>

int main()
{

std::cout<<"Hallo";


system("pause");
return 0;
}



Und übrigens es ist egal ob du hinter iosream ".h" dazu schreibs das ist nur ein überbleibsel aus der Sprache "c" bei C++ kannst du es meistens weg lassen

Gruß Fabi
 
Zuletzt bearbeitet:
fanste hat gesagt.:
Aber so kann das ja irgendwie nicht ganz sein.
Ich hab das .h und das void weglassen müssen. Zudem hab ich noch "using namespace std;" dazu schreiben müssen.

Woran liegt das, dass die Tutorial-Version von meiner funktionierenden so stark abweicht?
Das liegt daran, dass dieses Tutorial wohl keinen allzu großen Wert auf den C++-Standard legt, der von dir verwendete Compiler allerdings schon.

Die Verwendung von <iostream.h> als Headerdatei ist veraltet, man sollte stattdessen <iostream> verwenden (hast du ja bereits so gelöst).

Ohne using namespace std; sollte sich der Quellcode überhaupt nicht kompilieren lassen, da sich das Objekt cout im Namensraum std befindet.

Die main-Funktion musst dem Standard zufolge ein int als Rückgabewert besitzen. Inwiefern der Compiler ein void durchgehen lässt hängt von den jeweiligen Einstellungen ab.
 
Hi,

Danke euch beiden für die Antworten. Das heißt also, dass ich im Prinzip bei mir alle Tutorials "umschreiben" muss, damit sie funktionieren? Ich hab bisher nämlich überall
void main()
gesehen. Wenn mir nichts anderes übrigbleibt, werde ich das so machen.

Also nochmals danke euch beiden.

mb fanste
 
moin


Soo viele Änderungen dürften das auch nicht sein. Es hängt auch ein bsichen davon ab wie eng der Compiler das sieht, wobei es natürlich so sein sollte das man beim schreiben eines Tutorials davon ausgeht das der Compiler da streng ist.


mfg
umbrasaxum
 
Zurück