Kompelerungsproblem

Ich habe Anfang der Woche angefangen mich mit C++ zu beschäftigen.
habe recht Lange nach einer einfachen Programmierumgebung gesucht.
Bin dann über nem Tipp von nem Freund bei DevC++ gelandet, womit ich auch erstinmal ganz gut klarkam.
In einem Tutorial wurde wie immer zuerst das Hallo Welt Programm abgearbeitet, was bei mir so aussieht:
Code:
#include <iostream.h>
void main()
{
     cout<<"Hello world!"<<endl;
};

Beim Kompelieren, werden dann fehlermeldungen ausgegeben, die ich jetzt nicht alle aufzählöen möchte, da diese auch recht lang waren.
Kann mir bitte jemand sagen, wo der Fehler im Programm liegt.

ich danke im vorraus

[EDIT]Falls sich das hier mal wer anguckt, der nen tutorial sucht, ich nutze jetzt das hier das funzt: http://tutorial.schornboeck.net/ [/EDIT]
 
kleiner Tipp für die Zukunft:
Die Compiler-Meldungen sind GERADE DAS INTERESSANTE, was man braucht, um jemandem weiterhelfen zu können.

Aber HalloWelt ist so überschaubar, dass ich die möglichen Fehler schon so sehe.... :-D

also erstmal muss man sagen, dass jeder Compiler ein wenig anders reagiert und deshalb nicht immer jeder Code mit jedem Compiler problemlos zu übersetzen geht... der eine ist tolleranter, der andere nicht.

ich selbst nutze AnjutaIDE unter Linux, hab zwar auch noch irgendwo ein Windows mit DevC++ auf nem PC drauf, aber bin momentan nur mit Lappi unterwegs....

hier die möglichen Fehler-Quellen:
  • wenn du bei dem include-Befehl die spitzen Klammern nimmst, solltest du bei C++ meines Wissens nach eigentlich bei den Header-Dateien kein ".h" mehr ran hängen, solange er es aus dem Standard-Library-Verzeichnis laden soll
  • wenn ich mich richtig erinnere, kommt DevC++ nicht damit klar, wenn eine main-Funktion keinen Rückgabe-Wert hat - also aus dem void main() machst du ein int main() oder noch exakter ein int main(void) und als letzte Zeile der main-Funktion ein return 0
  • das Semikolon hinter der geschweiften End-Klammer der main-Funktion ist unnötig
  • es wurde kein Namespace angegeben, demzufolge müsstest du entweder bei cout und endl explizit std:: davor schreiben, oder den namespace definieren

demzufolge hier der korrigierte Code:

Möglichkeit 1:
Code:
#include <iostream>
int main(void)
{
    std::cout<<"Hello world!"<<std::endl;
    return 0;
}

Möglichkeit 2:
Code:
#include <iostream>
using namespace std;
int main(void)
{
    cout<<"Hello world!"<<endl;
    return 0;
}
 
@xeno: wer lesen kann, ist klar im Vorteil!

wenn ich mich richtig erinnere, kommt DevC++ nicht damit klar, wenn eine main-Funktion keinen Rückgabe-Wert hat

daher

int main(void)
{
//dein Programm-Code
//und der Return-Wert
return 0;
}
 
beavisbee hat eigentlich schon alles gesagt. <iostream.h> sollte in C++ nicht mehr genutzt werden, sie ist aber trotzdem bei jeder IDE dabei (ist afaik aus C und da C++ Compiler ebenso C akzeptieren, kannst du sie weiterhin benutzen). Ebenso stammt void main () aus C, in C++ gibt die main Funktion ein Integer zurück.

Mein 1. Vorschlag wäre: Such dir ein aktuelleres Tutorial oder kaufe dir am besten gleich ein Buch. Und wenn du in Zukunft programmiertechnische Probleme postest sind Compile Errors immer hilfreich.
 
also ich kenne void main nur vom Visual-C++ compiler.
Mein C-Compiler (gcc) wirft ne warnung aus, dass es int main heien müsste.
Vom Standard her ist es also int, aber wenn keine return Werte in der main funktion verwenden möchte, kann man genauso void main benutzen
 
Original von Heinzelotto
aber wenn keine return Werte in der main funktion verwenden möchte, kann man genauso void main benutzen

eben gerade nicht!!!
das ist doch das, was ich hier die ganze Zeit schon schreibe:

bei void main() hängt es vom Compiler ab, ob er automatisch ein int main() drauß macht und return 0 zurück gibt, ob er dazu Warnungen ausgibt, oder ob er sich schlicht weigert, den Code zu compilieren!

und deshalb sollte man in C++ sich angewöhnen, immer! int main(void) und return 0; oder noch besser return exit_success; zu verwenden!!!
 
Ich weiss ja nicht, wo du den Schmarn gelesen hast, aber es ob man void oder int vor die main schreibt, hängt nur vom verwendeten Standard ab. In einigen ist das void halt einfach untersagt. Viel mehr ist zu dieser Thematik nicht zu finden und ausserdem spiegelt es auch das was ich gelernt habe wieder.

Wenn du dauernd so darauf beharrst, dann zeig doch bitte mal Nachweise dafür.
 
also ich hab's so gelernt (von nem Info-Prof(!)), dass C++Compiler, die ein void main() unterstützen, im Hintergrund (ich glaub, wenn sie die ganzen Preproceccor-Anweisungen durchgehen) auch automatisch ein int main() draus machen - und andere weigern sich eben, den Code zu compilieren.

Und wer Compiler-unabhängigen C++-Code schreiben will, sollte sich eben auch an int main() halten!

Und wenn hier jemand mit C++ erst anfängt (wie eben Haldir), dann sollte man dem das gleich von Anfang an so beibringen und nicht mit so nem Quatsch wie "kannst auch void main() unter C++ schreiben" anfangen...

Ich muss allerdings zugeben, dass ich selbst nur mit gcc / g++ arbeite und Compiler von Borland und Microsoft bis jetzt nicht unbedingt genutzt habe...

Daher kann ich den C++-Test nicht machen (hätte es dir gerne bewiesen...)

Aber ich hab gerade mit gcc einen C-Quellcode compiliert mit void main() auch da wurde ich mit einer Warnung darauf hingewiesen, aber es wurde trotzdem compiliert, da es unter C keine Pflicht ist, einen Rückgabewert zu definieren
Danach hab ich das Programm in einnem Bash-Script gestartet und mit echo $? den Rückgabewert abgefangen.

einmal unter meinem Account, da kam 132 raus; einmal unter root eingeloggt und das ganze nochmal gestartet, da kam 52 raus.
Da kommt als Return-Wert also ein rein zufälliger Wert heraus (was halt gerade so im Speicher steht)

und gerade das ist das Problem: wenn man Programme über Scripte automatisieren will und keinen eindeutigen Rückgabewert bekommt, kann man nicht überprüfen, ob das Programm ordnungsgemäß ausgeführt wurde!



Unter Windows gibt es glaub ich die Variable errorlevel oder so ähnlich (mit irgendsowas in der Art hab ich zu DOS-Zeiten mal gearbeitet...) - da müsste theoretisch dort der Rückgabewert des letzten Programms stehen.

also wer Windows drauf hat und einen Compiler, der void main() bei c++ unterstützt, besitzt - bitte mal ausprobieren, ob da immer 0 rauskommt, oder - wie bei C - ein undefinierter Wert!
 
Ich danke vielmals für die Hilfreichen tipps!
Insbesondere beavisbee.
Quelltext funzt jetzt werde jetzt nen neues tut suchen, wenn wer eins weis bitte posten! thx

[EDIT]
Ich will nicht, das irgendwer wegen mir jetzt schen geht, nur wenn jemand auswendig ein gutes weiß!!!
[/EDIT]
 
Zurück
Oben