Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » vc++ und g++

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
31.08.2003, 10:58 Uhr
~nostro
Gast


Hallo

Kann mir mal jemand bitte erklären, warum "cout << " unter cygwin mit g++ funktioniert und unter VC++ nicht? <string> ist doch in der C++-Standartbib

C++:
#include <iostream.h>
#include <string>
using namespace std;

void main(){

    string f = "Hallo Du!";
    cout <<  f << endl;;
}


Fehler bei VC++:

Code:
"error C2679: Binaerer Operator '<<' : Kein Operator definiert, der einen rechtsseitigen Operator vom Typ 'class std::basic_string<char,struct std::char_traits<char>,class std::all"



Was ist der Unterschied zw <string> und <string.h>?

--edit: cpp- und code-tags eingefügt. Nächstes mal selber machen.

Dieser Post wurde am 31.08.2003 um 11:46 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
31.08.2003, 11:21 Uhr
Oliver
S2-Pixelgeneral


Hallo,

Du musst iostream ohne .h schreiben, dann sollte es gehen.

Bei string wird glaube alles im namespace std deklariert, genau wie bei iostream, und bei denen mit .h nicht, deswegen geht auch dein Beispiel nicht.
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
31.08.2003, 11:51 Uhr
0xdeadbeef
Gott
(Operator)


Mit .h geht auch. Der Code ist so schon in Ordnung, mal abgesehen davon:

C++:
[b]void[/b] main(){


was richtig hieße

C++:
[b]int[/b] main(){ //main ist immer int


aber VC++ rafft es mit der STL nicht so richtig aus. Hast du vielleicht _UNICODE definiert?

Übrigens, noch eine Sache: iostream.h ist zwar im Prinzip in Ordnung, allerdings Teil des alten Standards. Um Verwechslungen mit C (string.h vs string) zu vermeiden und ein stärkeres Namespacing zu erzwingen, müsste der Code neuerdings so aussehen:

C++:
#include <iostream>
#include <string>

int main(){
  std::string f = "Hallo Du!";
  std::cout << f << std::endl;
}


oder halt

C++:
#include <iostream>
#include <string>

using namespace std;

int main(){
  string f = "Hallo, Du!";
  cout << f << endl;
}


während das im alten Standard so aussah:

C++:
#include <iostream.h>
#include <string>

//using namespace std; war von Haus aus drin

int main() {
  string f = "Hallo, Du!";
  cout << f << endl;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 31.08.2003 um 11:52 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
31.08.2003, 15:05 Uhr
~nostro
Gast


Hallo

Danke für eure schnelle Antworten. Bin neu mit C++, deshalb vielleicht die etwas blöden Fragen.

@0xdeadbeef
Was meinst du genau mit _UNICODE?


Zitat:
iostream.h ist zwar im Prinzip in Ordnung, allerdings Teil des alten Standards

Heißt das, dass iostream.h was anderes ist wie iostream. Sollte man also immer .h weglassen bei den includes?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
31.08.2003, 16:49 Uhr
0xdeadbeef
Gott
(Operator)



Zitat:
~nostro postete
Was meinst du genau mit _UNICODE?


_UNICODE ist ein Präprozessor-Flag, dass der Compiler setzen kann. Wenn du mal in die Header-Dateien kuckst, die der VC++-Wizard dir erstellt, steht da am Anfang immer sowas in der Art:

C++:
#ifndef __HEADER_H_1239832983120
#define __HEADER_H_1239832983120

//hier der Rest

#endif


Das hat den Effekt, dass die Klasse, auch wenn irgendwo sowas steht:

C++:
#include "header.h"
#include "header.h"


nicht doppelt deklariert wird, was den Compiler durcheinander brächte. Im Windows-API wird das _UNICODE-Flag gesetzt, wenn die Anwendung standardmäßig Unicode (2-bit chars) verwenden soll. Das dürfte die STL zwar eigentlich nicht beeinflussen, weil die dazu eigene Klassen vordefiniert, aber die STL-Implementierung von Microsoft ist etwas merkwürdig, deswegen möchte ich nicht ausschließen, dass da was kurmm läuft. Ob das Flag gesetzt ist, müsstest du unter Project -> Settings -> C/C++ oder so ähnlich sehen.


Zitat:
~nostro postete
Heißt das, dass iostream.h was anderes ist wie iostream. Sollte man also immer .h weglassen bei den includes?

Ja.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: