Problem beim kompilieren von C++

fs2004

Lt. Junior Grade
Registriert
Apr. 2004
Beiträge
263
Tach!

Also, ich hab hier ein C++-Buch, welches eigentlich für Windows geschrieben wurde (es wurde mit einem windows Kompiler ausgeliefert). Ich dachte mir: "Hey, das is nur eine Programmiersprache! Linux kann das sicher auch, der Kernel is ja auch in C geschrieben!" Also, gecheckt und voilà: gcc bzw g++ bzw c++ ! Jetzt hab ich versucht, folgendes Programm zu kompilieren:

#include <iostream.h>

int main(void)

{

int Zahl = 6;

cout << Zahl;
cout << "Hallo World \n";

}

Und das kommt dabei vom Kompiler

$g++ test.c++
test.c++: In function `int main()':
test.c++:9: error: `cout' undeclared (first use this function)
test.c++:9: error: (Each undeclared identifier is reported only once for each
function it appears in.)

Was ist hier bitte falsch? "cout" wird doch von iostream zur verfügung gestellt, oder?

Vielen Dank!
 
Versuch mal oben drüber:

include <iostream>
using std::cout;


(iostream ohne .h)

Außerdem fällt mir auf, dass Du ein "int Main" hast, aber nix zurückgibst. entweder fehlt ein "return 0" oder sowas am Ende oder Du schreibst statt "int" "void" vor das Main.


HIER stehen paar Sachen zu den Streams für die Ausgabe ...
 
void main gibts aber nicht. die funktion muss was returnen...

wenn der code so im buch steht würde ich es ganz schnell wieder zurück geben. mit c++ hat das wenig zutun.
 
cout befindet sich im Namensraum std, entweder gibst Du std an oder Du nennst einmalig den verwendeten Namensraum.

Richtig wäre also z. B.
Code:
#include <iostream> // hier hab ich .h entfernt, bei C++-Includes wird keine Erweiterung angegeben, auch wenn (alte) Bücher das in den Beispielen haben.

using namespace std;

int main(void)

{

int Zahl = 6;

cout << Zahl;
cout << "Hallo World \n";

return 0; // Rückgabe nicht vergessen, wobei ich der Meinung bin, dass die main ohne explizite Rückgabe 0 zurückgibt

}
 
Zuletzt bearbeitet:
Siberian..Husky schrieb:
void main gibts aber nicht. die funktion muss was returnen...

wenn der code so im buch steht würde ich es ganz schnell wieder zurück geben. mit c++ hat das wenig zutun.

Ja Recht haste ja wenn mans genau nimmt, aber funktionieren tuts trotzdem. :D (zumindest bei den Compilern die ich kenne) Und hier ist es nicht wichtig ob Main irgendwas returnt oder nicht.
 
Danke leutz... zur Aufklärung: so stand das im Buch wörtlich natürlich nicht... und dort wird, jetzt da ich nochmal check "void main(void)" und kein return-Wert verwendet. Aber is ja windoof, sry, windows. Also... das "int main(void)" is jetzt richitg? Ist auch nachvollziehbar!

Kann mir jemand erklären, was dies "using namespace std" bewirkt? Ich will ja auch was lernen :D Danke!
 
fs2004 schrieb:
[...] Kann mir jemand erklären, was dies "using namespace std" bewirkt? Ich will ja auch was lernen :D Danke!
Namespaces werden dazu verwendet, Namenskonflikte zu verhindern. So geben dir beispielsweise Namespaces die Möglichkeit, gleiche Bezeichner in unterschiedlichen Namespaces zu verwenden ohne dass es zu Konflikten kommt.
Um in einem Namensbereich zu arbeiten, sofern du dich nicht schon in diesem befindest, musst du dann immer diesen voranstellen.
Um dies zu Umgehen gibt es das besagte "using namespace std;". Dies bewirkt, dass alle Namen in den aktuellen Namensbereich importiert werden.

MfG mh1001
 
Zuletzt bearbeitet:
- hat sich erledigt -

Jetz hab ich tatsächlich die Seite 1 Stunde offen gehabt, eh ich ersma was geschrieben hab und
dabei hat sich alles von janz alleene erleddigt :) schick ...
Dann ma schönen Freitag noch, ne!
MfG, Ronny
 
Zuletzt bearbeitet:
Siberian..Husky schrieb:
void main gibts aber nicht. die funktion muss was returnen...

wenn der code so im buch steht würde ich es ganz schnell wieder zurück geben. mit c++ hat das wenig zutun.


Der Compiler sollte eigentlich nur eine Warnung zurückgeben. Das Programm startet normalerweise aber trotzdem.
 
Zurück
Oben