Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Databyte

Alter Hase

  • »Databyte« ist der Autor dieses Themas

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

1

08.05.2009, 21:45

Problem mit UNICODE, fstream und std::istream_iterator

Hi

Ich hab ein kleines Problem, bei dem ich net weiterweiß:

ich habe eine Datei, die ich mit std::fstream öffne. Dann möchte ich diese
mit std::copy in einen Vector kopieren. Als iteratoren verwende ich std::istream_iterator.
Ohne UNICODE funktioniert das schon ganz gut, nur mit nicht.
Aber hier erstmal ein bischen code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#ifdef UNICODE
typedef wchar_t Char;
#else
typedef char Char;
#endif

// Buffer wo alles rein soll

std::Vector<Char> container;

std::basic_fstream<Char> file;

// jetzt die Datei öffnen

file.open( filename.c_str());

// Alles in den Buffer kopieren 

std::copy(  std::istream_iterator<Char>(file),
              std::istream_iterator<Char>(),
              std::back_inserter(container));

// Zum Schluss noch die Datei wieder schließen

file.close();


Beim Compilen mit UNICODE bekomme ich folgenden Fehler:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
error C2440: '<function-style-cast>' : cannot convert from 'std::basic_fstream<_Elem,_Traits>' to 'std::istream_iterator<_Ty>'
        with
        [
            _Elem=wchar_t,
            _Traits=std::char_traits<wchar_t>
        ]
        and
        [
            _Ty=Char
        ]
        No constructor could take the source type, or constructor overload resolution was ambiguous


Wiso geht das ohne UNICODE aber mit nicht ? Und was muss ich ändern, damit es funktioniert ?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

08.05.2009, 21:52

C-/C++-Quelltext

1
2
3
std::copy(    std::istream_iterator<Char, Char>(file),
                  std::istream_iterator<Char, Char>(),
                  std::back_inserter(container));

Databyte

Alter Hase

  • »Databyte« ist der Autor dieses Themas

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

3

08.05.2009, 21:58

cool... war irgedwie zu einfach...

Jetzt hab ich aber nochmal 2 verständnissfragen:

1. Du hast jetzt einfach "Char" benutzt... ich hab immer std::char_traits<Char> beim 2. benutzt ? was genau macht
dieses std::char_traits und wiso funktioniert das jetzt ohne ?

2. Muss die Datei, die jetzt geöffnet wird ( also mit UNICODE-compilierung) auch UNICODE sein
oder kann die auch normal sein.. also wird das automatisch erkannt ?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

4

08.05.2009, 22:01

1. Die (char) Traits (characterinfos) gehören normal an die dritte Stelle.
2. Nein, was in der Datei steht ist egal. Und "erkannt" wird in die Richtung nichts.

Databyte

Alter Hase

  • »Databyte« ist der Autor dieses Themas

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

5

08.05.2009, 22:03

Ok...und danke ;)

6

09.05.2009, 09:40

Zitat von »"David_pb"«

2. Nein, was in der Datei steht ist egal. Und "erkannt" wird in die Richtung nichts.

naja, egal würd ich nicht sagen. wenns kein unicode ist, kommt mist raus, weils trotzdem als unicode gelesen wird.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

7

09.05.2009, 09:50

Zitat von »"PCShadow"«

Zitat von »"David_pb"«

2. Nein, was in der Datei steht ist egal. Und "erkannt" wird in die Richtung nichts.

naja, egal würd ich nicht sagen. wenns kein unicode ist, kommt mist raus, weils trotzdem als unicode gelesen wird.


Jaund? Dem Stream ist es trotzdem egal. Selbst wenn sich irgendwelche Unicodezeichen in der Datei befinden, könnten die so kodiert sein dass totaler Unsinn entsteht. Die Frage ist wie die Daten interpretiert werden.

8

09.05.2009, 09:56

Zitat von »"David_pb"«

Jaund? Dem Stream ist es trotzdem egal. Selbst wenn sich irgendwelche Unicodezeichen in der Datei befinden, könnten die so kodiert sein dass totaler Unsinn entsteht. Die Frage ist wie die Daten interpretiert werden.

stimmt, ich hatte jetz Databytes frage so interpretiert, ob klartextdaten bzw. zu klartext gestreamte daten als unicode geschrieben werden müssen, wenn sie nach erneutem lesen als unicode verarbeitet werden sollen. Für nicht-text-daten hast du natürlich recht ;)

Werbeanzeige