Visual C++ ärgert mich

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
IlikeMyLife
Establishment
Beiträge: 212
Registriert: 08.05.2011, 09:59
Benutzertext: Feel Free

Visual C++ ärgert mich

Beitrag 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
zaiph
Beiträge: 3
Registriert: 08.07.2011, 00:02

Re: Visual C++ ärgert mich

Beitrag von zaiph »

Für die Nutzung von cout musst du

Code: Alles auswählen

#include <iostream>
verwenden, wie du es ja auch tust.
Aber wenn ich das richtig sehe, hast du den namespace vor dem cout vergessen.
Versuch mal:

Code: Alles auswählen

std::cout
IlikeMyLife
Establishment
Beiträge: 212
Registriert: 08.05.2011, 09:59
Benutzertext: Feel Free

[solved] Visual C++ ärgert mich

Beitrag von IlikeMyLife »

danke... das hat mir doch den nerv geraubt :-)

früher brauchte man es nicht und die gewohnheit war noch im blut :D
Benutzeravatar
kimmi
Moderator
Beiträge: 1405
Registriert: 26.02.2009, 09:42
Echter Name: Kim Kulling
Wohnort: Luebeck
Kontaktdaten:

Re: Visual C++ ärgert mich

Beitrag von kimmi »

Und ein

Code: Alles auswählen

std::endl;

// Dann alles zusammen
std::cout << "geht doch ;-) " << std::endl;
Gruß Kimmi
IlikeMyLife
Establishment
Beiträge: 212
Registriert: 08.05.2011, 09:59
Benutzertext: Feel Free

Re: Visual C++ ärgert mich

Beitrag von IlikeMyLife »

wieso eigentlich das std::endl 2 mal? funktioniert doch auch bei direktverwendung?!
Benutzeravatar
Top-OR
Establishment
Beiträge: 330
Registriert: 02.03.2011, 16:32
Echter Name: Jens H.
Wohnort: Esslingen/Dessau
Kontaktdaten:

Re: Visual C++ ärgert mich

Beitrag 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...
--
Verallgemeinerungen sind IMMER falsch.
Benutzeravatar
kimmi
Moderator
Beiträge: 1405
Registriert: 26.02.2009, 09:42
Echter Name: Kim Kulling
Wohnort: Luebeck
Kontaktdaten:

Re: Visual C++ ärgert mich

Beitrag von kimmi »

2 mal, weil ich keine Lust hatte, 2 mal Code-Brackets zu tippen. Einmal reicht natürlich :).

Gruß Kimmi
Zuletzt geändert von kimmi am 22.07.2011, 10:50, insgesamt 1-mal geändert.
IlikeMyLife
Establishment
Beiträge: 212
Registriert: 08.05.2011, 09:59
Benutzertext: Feel Free

Re: Visual C++ ärgert mich

Beitrag 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 :-)
Eisflamme
Establishment
Beiträge: 412
Registriert: 26.05.2002, 17:42
Wohnort: Köln

Re: Visual C++ ärgert mich

Beitrag 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.
IlikeMyLife
Establishment
Beiträge: 212
Registriert: 08.05.2011, 09:59
Benutzertext: Feel Free

Re: Visual C++ ärgert mich

Beitrag 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.
Benutzeravatar
Krishty
Establishment
Beiträge: 8267
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Visual C++ ärgert mich

Beitrag 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.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
kimmi
Moderator
Beiträge: 1405
Registriert: 26.02.2009, 09:42
Echter Name: Kim Kulling
Wohnort: Luebeck
Kontaktdaten:

Re: Visual C++ ärgert mich

Beitrag 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
IlikeMyLife
Establishment
Beiträge: 212
Registriert: 08.05.2011, 09:59
Benutzertext: Feel Free

Re: Visual C++ ärgert mich

Beitrag von IlikeMyLife »

@Krishty:
habe grade einige Tests bezüglich deiner Aussage gemacht.
Ist genau so wie du es sagtest.
Benutzeravatar
Aramis
Moderator
Beiträge: 1458
Registriert: 25.02.2009, 19:50
Echter Name: Alexander Gessler
Wohnort: 2016
Kontaktdaten:

Re: Visual C++ ärgert mich

Beitrag 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.
Benutzeravatar
kimmi
Moderator
Beiträge: 1405
Registriert: 26.02.2009, 09:42
Echter Name: Kim Kulling
Wohnort: Luebeck
Kontaktdaten:

Re: Visual C++ ärgert mich

Beitrag von kimmi »

Zeilenumbruch geht halt auch per \n.

Gruß Kimmi
Benutzeravatar
Krishty
Establishment
Beiträge: 8267
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Visual C++ ärgert mich

Beitrag 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.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
kimmi
Moderator
Beiträge: 1405
Registriert: 26.02.2009, 09:42
Echter Name: Kim Kulling
Wohnort: Luebeck
Kontaktdaten:

Re: Visual C++ ärgert mich

Beitrag 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
Benutzeravatar
Aramis
Moderator
Beiträge: 1458
Registriert: 25.02.2009, 19:50
Echter Name: Alexander Gessler
Wohnort: 2016
Kontaktdaten:

Re: Visual C++ ärgert mich

Beitrag 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.
Benutzeravatar
Krishty
Establishment
Beiträge: 8267
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Visual C++ ärgert mich

Beitrag 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.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
kimmi
Moderator
Beiträge: 1405
Registriert: 26.02.2009, 09:42
Echter Name: Kim Kulling
Wohnort: Luebeck
Kontaktdaten:

Re: Visual C++ ärgert mich

Beitrag von kimmi »

Ich nehm deswegen auch immer die entsprechende Windows-Funktion. Aber Aramis berichtete dergleichen.

Gruß Kimmi
Antworten