mikrocontroller.net

Forum: PC-Programmierung Probleme bei C++ Ausgabe


Autor: L. J. (luke1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute.
Ich habe eine Frage bezüglich der Ausgabe von meinem Sourcecode. Und 
zwar programmiere ich mit dem DEV-C++ Compiler und ich wollte mein 
Programm kompilieren. Ich bekomme aber einige Fehlermeldungen z.B. cout 
undeclared. Was das heißt weiß ich ja auch, nur habe ich im Internet 
eine Anleitung gefunden die das so geschrieben hat. Hier der Link:
http://www.mathematik.uni-marburg.de/~cpp/1tesprog...
Da steht auch, dass das Programm nicht funktioniert, wenn die Ausgabe 
auf Betriebssystemebene umgeleitet wird. Bedeutet das, dass das Programm 
nicht in DOS geöffnet werden darf? Und wenn ja wie änder ich das, dass 
das nicht mehr so ist?
Schonmal ein Danke für jeden Tipp und jede Bemühung.
MFG Luke

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nicht jedes Beispiel im Internet ist ein gutes Beispiel.

Probier' doch mal das hier:
#include <iostream>

int main( int nargs, char **args )
{
  std::cout << "Hallo Welt!" << std::endl;
}

Autor: L. J. (luke1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wow danke funktioniert einwandfrei. Ich musste lediglich was hinzufügen. 
Mein Code sieht nun so aus:
#include <iostream>

int main( int nargs, char **args )
{
  std::cout << "Hallo Welt!" << std::endl;
  while(1){}
}

Ansonsten wird das Fenster sofort wieder geschlossen. Aber wieso hat es 
das vorher nicht getan? Kennst du eine gute Seite wo ich C++ lernen 
kann?

Autor: Ch D. (chrisu) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: L. J. (luke1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja stimmt schon. Ich weiß das unter google viel steht. Aber genau das 
ist es. Ich mein ich war ja vorher auch schon auf einer Seite, aber der 
Code war ja anscheinend irgendwie nicht korrekt. Deswegen hab ich zur 
Sicherheit nachgefragt ob jemand dazu näheres weiß.

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Aber wieso hat es das vorher nicht getan?

Das Progrämmchen in

  http://www.mathematik.uni-marburg.de/~cpp/1tesprog...

war früher korrekt, aber heute nicht mehr ;-)

Grund: Im aktuellen C++-Standard wurden alle Deklarationen in den Hea-
derfiles der Standardbibliothek vom globalen Namespace in den Namespace
std verschoben, um die Gefahr von Namenskonflikten zu verringern.
Damit es keinen Durcheinander zwischen alten und neuen Headerfiles gibt,
wurden auch die Dateinamen geändert, und zwar von *.h nach * (also bspw.
von iostream.h nach iostream).

Beim aktuellen GCC werden die *.h-Headerfiles für C++ nicht mehr mitge-
liefert, weswegen du iostream.h durch iostream ersetzen musst. Da aber
iostream sämtliche Deklarationen in den Namespace std packt, musst bei
der Verwendung der deklarierten Klassen, Objekte usw. ein std:: voran-
setzen (also z.B. std::cout statt cout schreiben) oder alternativ ein

  using namespace std;

an den Anfang des Programms setzen.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
yalu schrieb:
> ...
> liefert, weswegen du iostream.h durch iostream ersetzen musst. Da aber
> iostream sämtliche Deklarationen in den Namespace std packt, musst bei
> der Verwendung der deklarierten Klassen, Objekte usw. ein std:: voran-
> setzen (also z.B. std::cout statt cout schreiben) oder alternativ ein
>
>   using namespace std;
>
> an den Anfang des Programms setzen.

Wovon ich bei jeder Gelegenheit abrate.
Allerdings seit Jahren erfolglos :-(

Ich habe hiermit meine Pflicht aber trotzdem mal wieder erfüllt.

Sonst hast du natürlich vollkommen recht.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
L. J. schrieb:
> Wow danke funktioniert einwandfrei. Ich musste lediglich was hinzufügen.
> Mein Code sieht nun so aus:
>
>
#include <iostream>
> 
> int main( int nargs, char **args )
> {
>   std::cout << "Hallo Welt!" << std::endl;
>   while(1){}
> }
> 
>
> Ansonsten wird das Fenster sofort wieder geschlossen. Aber wieso hat es
> das vorher nicht getan? Kennst du eine gute Seite wo ich C++ lernen
> kann?

Vorher konntest du dein Programm doch gar nicht übersetzen,
dachte ich?

Zu C++: Es gibt vermutlich keine Bücher/Internetseiten, mit denen
man mal eben schnell sinnvoll C++ lernt.

Mein Rat: erst Grundlagen von C lernen (weiß nicht, wie weit du
da bist), auch wenn man oft hört, man solle gleich mit C++
anfangen.
Dann den Stroustrup nehmen und sich durchbeißen (und ignorieren,
daß da genau drin steht, man solle gleich mit C++ anfangen)

Sicher gibt es auch andere brauchbare Bücher dazu, aber
den finde ich auf jeden Fall sinnvoll, auch nach Jahren noch.
Ist etwas hartes Brot, aber viel leichter wird es nicht
vernünftig gehen, dazu ist C++ doch zu komplex (oder zu
verworren, je nachdem).
Alles, was auf "C++ kurz und bündig" oder "C++ in 3.5 Stunden"
raus läuft, ist bei diesem Thema einfach zu oberflächlich.

(Falls das zu steinig ist: es gibt einfachere Sprachen, die
auch für vieles zweckmäßig sind.)

Autor: ... ... (docean) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie wärs mit http://de.wikibooks.org/wiki/C%2B%2B-Programmierung leider 
noch unvollständig

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ein leider noch unvollständiges habe ich auch anzubieten:
http://www.wachtler.de/cpp/index.html
bzw, als Postscript http://www.wachtler.de/ck.ps.gz
:-)

Nichtsdestotrotz rate ich für ernsthaftes Arbeiten dazu,
in einen Stroustrup zu investieren für C++ (und in den K&R
für ANSI-C).

Autor: L. J. (luke1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja in meinem letzten Programm habe ich auch:
using namespace std;
benutzt.

@ Klaus:
>>Vorher konntest du dein Programm doch gar nicht übersetzen,
>>dachte ich?

Doch ich habe schon normal in C programmiert. Auch mit dem Compiler. Da 
sieht so ein Programm bei mir so aus:
#include <stdio.h>

int main(void)
{
     printf("hello world\n");
     while(1){}
}
Grundlagen von C beherrsche ich schon ganz gut, aber ich wiederhole sie 
trotzdem nochmal, da ich nicht mehr alles weiß.

Und Danke für die vielen Vorschläge :)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klaus Wachtler schrieb:

>> setzen (also z.B. std::cout statt cout schreiben) oder alternativ ein
>>
>>   using namespace std;
>>
>> an den Anfang des Programms setzen.
>
> Wovon ich bei jeder Gelegenheit abrate.

Recht hast du.

> Allerdings seit Jahren erfolglos :-(

Leider.
Ich halte es mitlerweile so:
In einem *.cpp File kann ich es noch akzeptieren. In einem Header File 
ist ein using namespace aber völlig inakzeptabel.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auch in cpp mache ich das schon lange nicht mehr.
Bei größeren Quelltexten mit vielen #include sowieso nicht,
und daraufhin auch bei kleineren nicht wg. Einheitlichkeit.
Letztlich schreibe ich das std:: kaum von Hand, sondern
der Editor schreibt mir halt statt s ein:
  std::string
, statt cout ein:
   std::cout << << std::endl;
usw..

Letztlich habe ich damit genau das erreicht, was man mit
namespace erreichen will: eindeutige Klarheit, was Sache ist.

Autor: Sebastian Hepp (sebihepp)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du auch ein Buch möchtest, statt alles im INet nachzulesen, kann
ich dir 2 Stück von "Markt und Technik" empfehlen. Die Webseite des
Verlags ist http://www.mut.de/

Eingestiegen bin ich mit "M+T easy C++" von Dirk Louis.
ISBN: 3-8272-6026-4

Danach habe ich mir das "C/C++ Kompendium" zugelegt, auch von Dirk 
Louis.
ISBN: 3-8272-6812-5

Die beiden Bücher sind zwar mit 15 Euro und 30 Euro nicht gerade
günstig, aber ich habe es nicht bereut und lese sogar Heute noch
in dem Kompendium bestimmte Dinge gerne nach.

Viele Grüße
Sebihepp

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klaus Wachtler schrieb:
>   std::string
> , statt cout ein:
>    std::cout << << std::endl;
> usw..
>
> Letztlich habe ich damit genau das erreicht, was man mit
> namespace erreichen will: eindeutige Klarheit, was Sache ist.

Was sonst könnte man denn mit cin, cout und endl meinen?
Wer die Eindeutigkeit verletzt sieht, muss auch sagen wo ;-)

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
cin und cout sind nicht das Problem, die kann ich mir sogar
merken :-)

Es geht die Eindeutigkeit verloren bei den vielen Namen,
die in den Headerdateien außer cin und cout noch so stehen,
die man zu >90% nicht kennt und auch nicht alle unbedingt
auf allen Systemen gleich sind. Die schiebt man mit
using ebenfalls in den globalen Namensraum.
Wenn in std:: z.B. ein i steht, wird mit using namespace std
auf einmal eine lokale Variable i, die ich vergessen habe
zu deklarieren, zu dem i aus std::.
Ohne using namespace ist in jedem Fall klar, was von mir
kommt und was aus den Headerdateien, solange ich meine
Namen nicht mutwillig in namespace std definiere.

Ein using namespace... führt die namespaces ad absurdum
und hat m.E. bestenfalls dann eine Berechtigung, wenn ich
längere C-Passagen ohne Aufwand übernehmen muß (bei std,
bei anderen mag es anders sein).

Man könnte auch einzelne Namen gezielt übernehmen, aber
using namespace std ist die große Keule.

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klaus Wachtler schrieb:
> Man könnte auch einzelne Namen gezielt übernehmen, aber
> using namespace std ist die große Keule.

Aha...

using std::cin;
using std::cout;
using std::endl;

Klingt nicht ganz unvernünftig :)

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gut; das ist jetzt nicht mein Geschmack, aber ich habe
auch nichts dagegen einzuwenden.

Ich räsoniere nur gelegentlich gegen die große Keule
"using namespace std;"

:-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.