Seite 1 von 1
Visual C++ ärgert mich
Verfasst: 22.07.2011, 09:26
von IlikeMyLife
Hallo,
ich habe gestern Abend ein Update durchgeführt von
Visual C++ 2005 Express-Edition
nach
Visual C++ 2010 Express-Edition
auf meinem Win7-Rechner
habe mich tierisch auch gefreut, endlich nach 2 Stunden de- und installation wieder coden zu können,
habe eine Konsolenanwendung zum warm werden Schreiben wollen um mich mit der IDE der neuen Version vertraut zu machen
und siehe da... der Quellcode funktioniert nicht...
ich weis wo der Fehler liegt... aber finde die Lösung nicht.
Hier mein Quellcode:
Code: Alles auswählen
#include <iostream>
// #include <stdio.h> probiert
// #include <stdio> probiert
// #include <cstdio.h> probiert
// #include <cstdio> probiert
int main(void)
{
int x = 1;
cout << "Zahl ist " << i;
system("pause");
}
meine verzweiflung grade, wo versteckt sich die definition von cout :-/
oder wurde dieser befehl ersetzt?!
Google und die MSDN wollten mir beide nicht helfen :-( ich habe momentan einige diskripanzen mit beiden :D
Re: Visual C++ ärgert mich
Verfasst: 22.07.2011, 09:36
von zaiph
Für die Nutzung von cout musst du
verwenden, wie du es ja auch tust.
Aber wenn ich das richtig sehe, hast du den namespace vor dem cout vergessen.
Versuch mal:
[solved] Visual C++ ärgert mich
Verfasst: 22.07.2011, 09:47
von IlikeMyLife
danke... das hat mir doch den nerv geraubt :-)
früher brauchte man es nicht und die gewohnheit war noch im blut :D
Re: Visual C++ ärgert mich
Verfasst: 22.07.2011, 09:47
von kimmi
Und ein
Code: Alles auswählen
std::endl;
// Dann alles zusammen
std::cout << "geht doch ;-) " << std::endl;
Gruß Kimmi
Re: Visual C++ ärgert mich
Verfasst: 22.07.2011, 09:53
von IlikeMyLife
wieso eigentlich das std::endl 2 mal? funktioniert doch auch bei direktverwendung?!
Re: Visual C++ ärgert mich
Verfasst: 22.07.2011, 09:58
von Top-OR
Sicher? Wenns so ist (weiß ich nicht), dann wirds wohl nicht im namespace std hängen.
Hau doch einfach nach dem include noch ein using namespace std; mit rein, dann kannste dir den voll qualifizierten Aufruf sparen...
Re: Visual C++ ärgert mich
Verfasst: 22.07.2011, 10:11
von kimmi
2 mal, weil ich keine Lust hatte, 2 mal Code-Brackets zu tippen. Einmal reicht natürlich :).
Gruß Kimmi
Re: Visual C++ ärgert mich
Verfasst: 22.07.2011, 10:18
von IlikeMyLife
Top-OR hat geschrieben:Hau doch einfach nach dem include noch ein using namespace std; mit rein, dann kannste dir den voll qualifizierten Aufruf sparen...
Nach dem Prinzip habe ich früher mal gearbeitet. Ich weis nicht mehr, bei welchem Befehl es war. Allerdings habe ich irgendwann einen Fehler gehabt, der sich auf die einzelnen Befehle ausgewirkt hat. Wenn ich nun den gesamten Code nach ( wie in diesem Falle ) nach std:: durchsuchen lasse, komme ich schneller auf suchergebnisse im Code als die Überlegung zu haben.
Nutze ich auch viel bei Performance-Coding :-)
Funktioniert beides, allerdings ist es in diesem Falle reine geschmacks-sache :-)
Re: Visual C++ ärgert mich
Verfasst: 22.07.2011, 10:42
von Eisflamme
Krass, das so was hier im Forum aufkommt. Dass die iostream-Komponenten in std liegen ist seit... über 10 Jahren jedenfalls so.
std:: und using namespace std; ist fast immer egal (wobei ich keinen Nachteil bei using namespace std sehe, wenn man keine Konflikt-Namen hat). Wichtig ist nur, dass man im Header nie ein using namespace nutzt. Denn jeder, der das inkludiert, hat dann ebenfalls den Namensraum bekannt. Damit hebelt man das namespace-Konzept also wirksam aus.
Re: Visual C++ ärgert mich
Verfasst: 22.07.2011, 11:05
von IlikeMyLife
@Eisflamme:
Wenn man wie ich damals eine direktverlinkung Innerhalb der iostream auf den namespace betroffenen Namespace packt, ist das nicht mehr so verständlich ;-)
reiner Anfängerfehler meiner seits, der sich seid dem jahre 2005 bis heute durch gezogen hat.
Re: Visual C++ ärgert mich
Verfasst: 22.07.2011, 11:30
von Krishty
Ich glaube, kimmi hatte nicht gesagt, warum das ::std::endl so wichtig ist: ::std::cout ist ein ungepufferter Stream, d.h. wenn man etwas reinschreibt ist noch längst nicht garantiert, dass es auch auf dem Bildschirm sichtbar wird. ::std::endl beginnt nicht nur eine neue Zeile, sondern flusht auch noch den Stream, so dass beim Erreichen von system("pause"); auch definitiv auf dem Bildschirm angezeigt wird, was du vorher ausgeben wolltest.
Re: Visual C++ ärgert mich
Verfasst: 22.07.2011, 11:43
von kimmi
Stimmt, das hatte ich nicht so eplizit ausgeführt. Aber dafür haben wir ja auch den Krishty, der kann das eh viel detailierter :).
Gruß Kimmi
Re: Visual C++ ärgert mich
Verfasst: 22.07.2011, 12:46
von IlikeMyLife
@Krishty:
habe grade einige Tests bezüglich deiner Aussage gemacht.
Ist genau so wie du es sagtest.
Re: Visual C++ ärgert mich
Verfasst: 22.07.2011, 16:23
von Aramis
Was sollte es sonst sein, der Standard fordert das flush() :-)
Daraus folgt uebrigens, dass man nicht fuer jeden Zeilenwechsel endl verwenden sollte (auch wenn manche Pseudo-C++-Fanatiker das sicherlich anders sehen), sondern nur fuer den jeweils letzten in der aktuellen Ausgabe.
Re: Visual C++ ärgert mich
Verfasst: 22.07.2011, 16:26
von kimmi
Zeilenumbruch geht halt auch per \n.
Gruß Kimmi
Re: Visual C++ ärgert mich
Verfasst: 22.07.2011, 16:32
von Krishty
Darum sollte man ::std::cout auch nicht für Debugging-relevante Ausgaben nutzen – dafür gibt es das ungepufferte ::std::cerr, das alles sofort zur Ausgabe bringt.
Re: Visual C++ ärgert mich
Verfasst: 22.07.2011, 16:35
von kimmi
War das nicht so, dass std::cout im VS-Debug-Ouput-fenster angezeigt werden? Irgendwo im Assimp-Code habe ich von Aramis einen Kommentar in diese Richtung gelesen, oder? Wenn dem so wäre, hat std::cout durchaus Vorteile.
Gruß Kimmi
Re: Visual C++ ärgert mich
Verfasst: 22.07.2011, 16:38
von Aramis
Ja, std::cerr taucht standardmaessig nicht im VC-Output aus, jedenfalls nicht mit VC 2005 (ich habe es seitdem nie mehr probiert).
Ein std::cout mit einem explizit aufgerufenen flush hat allerdings keine wirklichen Nachteile (und duerfte sogar flotter sein), davon abgesehen, dass es eben der Output und nicht der Debug-Stream ist.
Re: Visual C++ ärgert mich
Verfasst: 22.07.2011, 17:01
von Krishty
kimmi hat geschrieben:War das nicht so, dass std::cout im VS-Debug-Ouput-fenster angezeigt werden?
Als Stammkundschaft des Debug-Output-Fensters kann ich sagen: Standardmäßig definitiv nicht. Allerdings lassen sich
::std::cout/clog/cerr per
rdbuf() beliebig umleiten, eben auch in besagtes Fenster.
Re: Visual C++ ärgert mich
Verfasst: 22.07.2011, 17:20
von kimmi
Ich nehm deswegen auch immer die entsprechende Windows-Funktion. Aber Aramis berichtete dergleichen.
Gruß Kimmi