Wieso kommt diese fehlermeldung

tblumenthal

Grünschnabel
hallo,

ich bin anfänger und habe schon beim ersten programm probleme.

also, ich benutze die neuste version von defcpp und gehe nach der anleitung von vollkards c++ kurs.

das ist der code :

#include <iostream.h>
void main()
{
cout<<"Es kommt ein Mann zum Baecker und sagt: Ich moechte 99 Broetchen."<<endl;
cout<<"Da fragt der Baecker: Duerfen es auch 100 sein?"<<endl;
cout<<"Der Mann antwortet: Nein, wer koennte denn so viele essen?"<<endl;
};

genau so hab ich es abgetippt und es dann kompiliert und ausgeführt. Funktioniert nicht und es gibt folgende fehlermeldung:

Compiler: Default compiler
Building Makefile: "F:\Dev-Cpp\Makefile.win"
Führt make... aus
make.exe -f "F:\Dev-Cpp\Makefile.win" all
g++.exe -c baecker2.cpp -o baecker2.o -I"f:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"f:/Dev-Cpp/include/c++/3.4.2/backward" -I"f:/Dev-Cpp/include/c++/3.4.2/mingw32" -I"f:/Dev-Cpp/include/c++/3.4.2" -I"f:/Dev-Cpp/include"

In file included from f:/Dev-Cpp/include/c++/3.4.2/backward/iostream.h:31,
from baecker2.cpp:1:
f:/Dev-Cpp/include/c++/3.4.2/backward/backward_warning.h:32:2: warning: #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.
baecker2.cpp:3: error: `main' must return `int'

make.exe: *** [baecker2.o] Error 1

Ausführung beendet


für hilfe wäre ich sehr dankbar

gruss tom
 
Dein Buch ist zu alt. :-)

Die erste Compilermeldung ist eine Warnung. Du inkludierst <iostream.h>, was aber veraltet ist. In neuem Code sollte das so aussehen:

Code:
#include <iostream>

Die zweite Meldung erfolgt, weil Deine main() keinen Rückgabewert vom Typ int liefert. Das muß aber so sein:

Code:
...
int main()
{
...
}

Und zu guter letzt...der Compiler hat Dir alles was zu tun ist schon in die Meldungen reingeschrieben. Lesen bildet und *gute* Bücher auch...
 
Zuletzt bearbeitet:
Müssen müsste er nicht, entweder er schreibt

Code:
using namespace std;

int main(int argc, char **argv) {
    cout << "hallo" << endl;
    return(0);
}

oder er schreibt:

Code:
int main(int argc, char **argv) {
    std::cout << "hallo" << std::endl;
    return(0);
}

Gruss

Sebastian
 
ishino hat gesagt.:
Dein Buch ist zu alt. :-)

Die erste Compilermeldung ist eine Warnung. Du inkludierst <iostream.h>, was aber veraltet ist. In neuem Code sollte das so aussehen:

Also ich würde mal sagen dass das nichts mit alt oder neu zu tun hat.
<iostream.h> ist C Standart
<iostream> ist C++ Standart.

Gruß 2fast...
 
2fast4you87 hat gesagt.:
Also ich würde mal sagen dass das nichts mit alt oder neu zu tun hat.
<iostream.h> ist C Standart
<iostream> ist C++ Standart.

Doch, iostream.h ist tatsächlich veraltet. Ich zitiere mal Nicolai Josuttis aus seinem Buch »Objektorientiertes Programmieren in C++« (Seite 30):
»Das Konzept der Namensbereiche wurde erst im Rahmen der Standardisierung con C++ eingeführt. In den ersten Versionen von C++ gab es kein derartiges Konzept. Entsprechend hatten die Headerdateien, die Symbole für die Anwendung von exisiterenden Bibliotheken und Komponenten definieren, einen anderen Aufbau.«
Vergleich dazu einfach mal die beiden Dateien iostream.h und iostream der aktellen glibc, die sich signifikant unterscheiden.
Kompilier ich unter g++ eine Datei mit iostream.h kommt auch die entsprechende Warnung:
Code:
/usr/include/c++/4.0.2/backward/backward_warning.h:32:2: 
Warnung: #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.

Übrigens heißt es Standard und nicht Standart ;)

C Standard Dateien werden unter C++ ebenfalls ohne .h Suffix eingebunden und erhalten zur Abgrenzung noch zusätzlich ein c Präfix, also beispielsweise:
#include <cstdio>
 
Sorry, muss dieses Thema mal wieder rauskramen!
Ich habe den Fehler wie oben beschrieben versucht zu behandeln.
Also statt <iostream.h> habe ich nun <iostream> nach dem #include stehen.

Nun meldet er mir aber folgendes:
Code:
../source/CTextdatei.cpp:14: error: `cout' undeclared (first use this function)
../source/CTextdatei.cpp:14: error: (Each undeclared identifier is reported only once for each function it appears in.)
../source/CTextdatei.cpp:14: error: `endl' undeclared (first use this function)
 
Hi.

Das wurde auch oben schon erwähnt. Du mußt den Namensbereich angeben/benutzen wenn du auf Objekte/Funktionen der Standardbibliothek zugreifst.

Code:
std::cout << "xyz" << std::endl;
Oder du verwendest wie oben beschrieben die using namespace Deklaration und bindest somit alles vom Namensbereich std in den globalen Namensbereich ein.

Gruß
 
Zurück