Archiv verlassen und diese Seite im Standarddesign anzeigen : Anfänger c++
klaus_harrer
26-10-2003, 09:55
Hallo
Ich habe gerade angefangen mich mit c++ zu beschäftigen Dazu habe ich mir vor einigen Jahren ein Buch gekauft "C++ echt einfach". Wollte auch gleich das obligatorische "Hello World" ausprobieren, mit folgender Quelldatei:
# include <iostream>
main() {
cout << "Hallo Klaus\n";
}
Nun versuche ich mittels
g++ -o Hallo Hallo.cpp
zu kompilieren.
Funktioniert so nicht.
Nun habe ich über das Internet erfahren das es einen neuen Standart gibt
# include <iostream>
main() {
std::cout << "Hallo Klaus\n";
}
nun funtioniert es.
Gibt es ein aktuelles Tutorial, damit ich gleich weiterlernen kann?
MfG
Klaus
http://userpage.fu-berlin.de/~ram/pub/pub_detics8/c++_de
Berufspenner
26-10-2003, 10:08
Hi
Was heißt "Funktioniert so nicht."? Werde mal konkret. Welche Meldungen hat der g++ ausgespuckt?
Gibt es ein aktuelles Tutorial, damit ich gleich weiterlernen kann? Ich bin zwar ein verfechter von Lehrbüchern, aber wenn du hier im Forum mal nach Tutorials suchst oder wirst du definitiv fündig.
Cu
André
Original geschrieben von Berufspenner
Was heißt "Funktioniert so nicht."? Werde mal konkret. Welche Meldungen hat der g++ ausgespuckt?
Wird wohl irgendwas wegen dem fehlenden namespace gewesen sein,den er ja im zweiten Beispiel angegeben hat.
Berufspenner
26-10-2003, 10:43
Original geschrieben von wraith
Wird wohl irgendwas wegen dem fehlenden namespace gewesen sein,den er ja im zweiten Beispiel angegeben hat. Dann wird es aber wohl eher an seinem Compiler gelegen haben.
Cu
André
anda_skoa
26-10-2003, 11:19
Original geschrieben von Berufspenner
Dann wird es aber wohl eher an seinem Compiler gelegen haben.
Wenn der Compiler das erste Beispiel kompiliert hätte, dann würde was an ihm liegen.
Ciao,
_
klaus_harrer
26-10-2003, 21:18
Hallo
Folgende Fehlermeldung beim genannten Beispiel
g++ -o test1 test.cpp
test.cpp: In function `int main()':
test.cpp:4: `cout' undeclared (first use this function)
test.cpp:4: (Each undeclared identifier is reported only once for each function
it appears in.)
Ich benutze g++ 3.2.
MfG
Klaus
anda_skoa
26-10-2003, 22:10
Ja, das ist auch in Ordnung so.
cout ist kein globles Symbol, sondern im Namensraum std deklariert.
Wenn man den nicht angibt, gibt es cout aus Sicht des Kompilers nicht.
Alles andere wäre ein Fehler des Kompilers, bzw. des Headers.
Häufig benutze Symbole können in der aktuellen Datei auch global bekannt gemacht werden
#include <iostream>
using std::cout;
int main()
{
cout << "Hallo" << std::endl;
return 0;
}
Das sollte man aber nur in Sourcedateien tun, den Namespaces sind dazu da, Namenskonflikte zu verhindern und ihre Symbole "rauszuholen" sollte also begrenzt bleiben.
Beim ausprobieren kann es manchmal ganz praktisch sein, den Namensraum ganz zu öffnen
#include <iostream>
using namespace std;
int main()
{
cout << "Hallo" << std::endl;
return 0;
}
Ciao,
_
ProLinuxJorge
29-10-2003, 00:00
Hallo Forum,
ich kann angesichts dieses angeblichen Anfängerproblem leider nur scharf eine Empfehlung auf Anfängerliteratur geben.
Bitte lest Werke wie "Goto C++", Verlag Addison-Wesley, "Jetzt lerne ich C++", eines der vielen Online
z.B. über
www.cetus-links.de
oder
www.coderlinks.de
zugänglichen Tutorials, um derartige Fragen zu vermeiden.
Die Deklaration:
"namespace std;"
fehlt hier.
Das Konzept der Namensräume muss einem Anfänger sicher nicht geläufig sein, da es sich erst bei größeren Programmen (Metrik LOC größer als über den Daumen gepeilt 5000 Zeilen, eigenes Ermessen, bitte diskutieren) lohnen sollte.
Aber bitte berücksichtigt bei dem Für und Wider einer solchen Frage hier im Forum auch die Antwort "Read The Fucking Manual" (RTFM), wie sie schon mal in Foren im USENET zu hören ist. Als Anfänger sollte man lernen und nicht irrationale Fragen stellen, die schon des öfteren, oft zuhauf und übermäßig diskutiert und beantwortet worden sind. Ich beantworte Fragen gerne, aber ich sehe nicht ein, mich mit den von etlichen Fachautoren bestens und vorzüglichst ausgeführten Zusammenhängen zu beschäftigen. Seit bitte ehrlich mit euch selbst und LEST.
Mit freundlichen Grüßen
J. Stein
ProLinuxJorge
29-10-2003, 00:07
Hallo liebe Forumler,
als Anhang zu meinem vorigen Posting hier noch ein Verweis auf eine im englischen Sprachraum zentrale Seite zur Diskussion und Rezension von Büchern zu den Sprachen
C und C++ der "Association of C and C++ Users":
www.accu.org
Diese Seite wurde zur Orientierung in der Masse der Werke zu diesen Sprache vom Schöpfer der Sprache C++, Bjarne Stroustrup, empfohlen.
Ich hoffe, Ihr könnt Euch genügend Informationen zu C++ beschaffen, ohne die Lust am Programmieren zu verlieren.
Das Buch "C++ Primer" ist z.B. ein Standartwerk zu C++. Aber denkt ja nicht, dass das das einzige ist...
A. Stepanov schrieb ein Standartwerk zur "Standart Template Library". Dies darf auch nicht vergessen werden an dieser Stelle.
Nun ist es euch überlassen die Informationen auf der genannten Seite zu durchforsten :)
Glaubt mir, die Mühe lohnt sich, denn Programmierer in C++ wird man niemals in wenigen Monaten... Dafür ist sie doch ein wenig schwer. Ihr schafft das! :)
Mit freundlichen Grüßen
J. Stein
ProLinuxJorge
29-10-2003, 00:16
Hallo Ando_Skoa,
ich möchte mich äußern zu dem Konzept der Namensräume.
Bitte versuche an dieser Stelle nicht, das Konzept der Namensräume darzulegen. Du bräuchtest dafür richtigerweise eine Zeit, damit angemessen rüberkommt, was der Autor der Sprache mit dem Konzept bewirken wollte. Sei einfach ausführlicher, oder lass es ganz sein, ok :)
Ich stimme dir zu, dass Konflikte von Bezeichnern durch das Konzept des Namensraumes vermieden werden. Es ist nicht sinnvoll zu behaupten, es sein unsinnig, Bezeichner freizustellen in einem Raum, d.h. sie aus einem Raum "herauszuholen".
Bitte sieh einmal kurz in das Standartwerk von B. Stroustrup "The C++ Programming Language", um das Konzept des Namensraumes einem potentiellen Anfänger richtig vermitteln zu können und nicht nur, um Zeilen zu füllen, wie du es wohl hier nicht ganz unschuldig tun wolltest. Vorsicht!! Beachte, dass die Sprache C++ sehr gründlich durchdarcht worden ist. Ein Anfänger soll Interesse am ganzen Konzept zeigen und es am besten von Anfang an direkt verstehen können, anstatt "Appettit" mit Kleinigkeiten gemacht zu bekommen! Beherzige dies bitte!
Ansonsten wird ein Anfänger sich nur schmerzlich mit neuen wieder verdrehten Fakten anfreunden müssen und das willst du ihm doch nicht antun, oder?
Mit freundlichen Grüßen
J. Stein
@ProLinuxJorge
B.Stroustrup erklärt namespace in seinem Buch in ~30 Seiten.
Und da es noch weit kompliziertere Themen gibt (in dieser und anderer Sprachen),kann die Konsequenz deines Postings also nur lauten,Anfänger bei jeder Frage auf RTFM zu verweisen.
Damit können wir alle Foren und das Usenet dicht machen.
Ich finde bezeichned ist für deine ganzen Postings,das du nicht einmal Standard korrekt geschrieben hast ;).
Vielleicht hättest du die oben beschriebenen Bücher einmal selber lesen sollen.
Naja,um auch etwas konstruktiv zu posten
Das Konzept der Namensräume muss einem Anfänger sicher nicht geläufig sein,
da es sich erst bei größeren Programmen
(Metrik LOC größer als über den Daumen gepeilt 5000 Zeilen, eigenes Ermessen, bitte diskutieren) lohnen sollte.
Das sehe ich nicht so.
Namensräume (und wenn es nur unbenannte Namensräume sind) sind in einem Programm jeder Größe sinnvoll.
In C,wo es das Konzept nicht gibt,gibt es viele Bezeichnerregeln,die ein Programmierer beachten muß,damit sein Programm nicht in 'undefined behavior' versinkt.
Bsp. sind Bezeichner die mit str beginnen für die Implementierung reserviert.
Wahrscheinlich hast du noch nie erlebt wie der falsche (bzw. nicht Einsatz) von Namensbereichen,ein ~100 LOC Programm zum scheitern gebracht hat.
Namenskonflikte können immer auftreten,ob das Programm nun 5 oder 5000 Zeilen hat.
peschmae
29-10-2003, 12:12
ausserdem finde ich es durchaus legitim, wenn man sich, wenn ein beispiel aus einem Buch nicht funktioniert (kommt häufiger vor als man denkt), mal an das Forum wendet.
Schliesslich lernt man ja noch C++ und kann folglich (da in dem Buch nix stand) auch nichts über das Konzept bzw. den Fehler in dem Listing wissen.
MfG Peschmä
buchwaldj
30-10-2003, 14:12
manchmal hilft auch in der ersten Zeile:
#include <iostream.h> statt <iostream>
oder man bleibt direkt bei GCC 2.9.x ;)
im ernst:
#include <iostream.h> statt <iostream>
sollte man nicht machen, denn iostream.h ist deprecated und wird
irgendwann nicht mehr da sein...
gruss
Arthur
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.