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

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

1

10.02.2007, 17:57

std::getline nur für std::string und char* -> Alternative

Hallo zusammen,

folgende Frage: Mit std::getline kann man ja nur std::string oder char* einlesen. Gibt es eine adäquate Möglichkeit auch wchar_t oder wstring (oder ist wstring = wchar_t?) zeilenweise einzulesen, denn ich brauche das Eingelesene nacher als LPWSTR.

Grüße - spacegaier

2

11.02.2007, 10:04

bin mir gerade nicht sicher aber was spricht gegen:

C-/C++-Quelltext

1
2
std::wstring input;
std::getline(std::wcin, input);
?
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

3

11.02.2007, 12:49

Also ich poste mal Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
std::ifstream FileIn("fragen.txt");
            std::basic_string<wchar_t> buffer;
            if (FileIn)     // Falls FileIn gültig ist. 

            { 
                // Solange kein Fehler auftritt und nicht eof 

                while(FileIn.good())
                {
                    std::getline(FileIn, buffer);)
                
                    Contents.push_back(buffer);   // Aktuelle Zeile in den Vektor einfügen 

                } 
            }
            
            SetDlgItemText(hwnd, IDC_FRAGE, Contents.at(1))


Das Problem entsteht dann, wenn ich das geladene mittels SetDlgItemText in meinen nDialog einsetzen möchte, denn die Funktion braucht LPWSTR.

D.h. ich müsste wahrscheinlich hergehen und den Inhalt der Datei mittels getline in einen (narrow-)string schreiben und dann brauche ich einen mir eben unbekannten Zwischensschritt um daraus dann einen wstring zum machen, den ich dann doch an SetDlgItemText übergeben können müsste, oder?

4

11.02.2007, 15:34

hmm und warum nimmst de keinen std::wifstream ?

Achja ... warum nimmst du std::basic_string<wchar_t> ? Anstelle von std::wstring? Hat nixda das mal drin gehabt oder was?
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

5

11.02.2007, 15:42

Das mit dem unbekannten Zwischenschritt zum wstring ist mir auch ein rätsel... std::basic_string<wchar_t> ist von wstring nur ein typedef und ein using entfernt :p

Falls du allerdings deinen wstring in ein wchar_t* umwandeln willst:
wcscpy (oder irgendsone secure variante) mit wstring::c_str() als Quelle und nen entsprechend großes wchar_t-array als Ziel.

// beim nochma durchlesen fällt mir auf, dass du evtl. grad andersrum willst...

wstring hat sowohl Konstruktor als auch Copyoperator für wchar_t* - somit ist das umwandeln von array zu wstring leichteste Übung ever.

@Deviloper:
Ich steige immer dann auch std::basic_string<TCHAR> um, wenn ich irgendwelche Libs oder so entwickle - damit lass ich offen, ob es UNICODE oder ANSI werden soll. Ansonsten haste nat. recht - std::string und std::wstring sind wesentlich schöner zu lesen

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

6

11.02.2007, 16:07

Geht trotzdem noch net :( :

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
std::wifstream FileIn("fragen.txt");
            std::wstring buffer;
            if (FileIn)     // Falls FileIn gültig ist. 

            { 
                // Solange kein Fehler auftritt und nicht eof 

                while(FileIn.good())
                {
                    std::getline(FileIn, buffer);)
                
                    Contents.push_back(buffer);   // Aktuelle Zeile in den Vektor einfügen 

                } 
            }
            
            SetDlgItemText(hwnd, IDC_FRAGE, Contents.at(1));

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

7

11.02.2007, 16:54

und welchen Typ hat Contents?

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

8

11.02.2007, 17:06

C-/C++-Quelltext

1
static std::vector<std::wstring> Contents; // Container für die einzelnen Zeilen

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

9

11.02.2007, 17:45

Ich erhalte jetzt nur noch einen Fehler:

Quellcode

1
2
3
4
5
6
7
8
c:\[...]\visual studio 2005\projects\europaquiz\europaquiz\main.cpp(132) : error C2664: 'SetDlgItemTextW': Konvertierung des Parameters 3 von 'std::basic_string<_Elem,_Traits,_Ax> *__w64 ' in 'LPCWSTR' nicht möglich
        with
        [
            _Elem=wchar_t,
            _Traits=std::char_traits<wchar_t>,
            _Ax=std::allocator<wchar_t>
        ]
        Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.


* geändert von koschka

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

10

11.02.2007, 17:52

ja das wird wohl daran liegen das Parameter 3 kein char_w* ist. Hast du nen wstring? - Vergessen Methode c_str() aufzurufen ;)

Oder hast du einen char* String... den musst du in wchar* umwandelt, oder SetDlgItemTextA verwenden

Werbeanzeige