Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    81

    [C++] Problemi con wchar_t

    Ciao..ho un problemino da risolvere. Ho scritto il seguente frammento di codice:
    codice:
    map<const wchar_t*,vector<wstring>> mappa1;
    map<const wchar_t*,vector<wstring>>::iterator it;
    
    	const wchar_t* chiave;
    	
    	if(mappa1.size()>0){
    	for(it= mappa1.begin(); it!=mappa1.end(); it++){
    	
    	chiave=it->first;
    	cout<< "\n chiave " <<chiave;
    Vorrei stampare il contenuto stringa di chiave, ma l'output è il seguente:

    chiave 004BF000

    Ho provato anche ad inserire una chiave nella mappa di ti wstring..ma mi vengono sollevati una marea di errori..il tipo wstring non può essere utilizzato come chiave in una mappa???

    Saluti e grazieee

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    codice:
    wcout << "\n chiave " <<chiave;
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    e..

    e il la fuzione cout che stampa a seconda della definizione o meno di UNICODE.... _cout.... o una cosa el genere esiste???

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    81
    Ho provato con wcout ma non funziona..non stampa niente..non ho capito cosa intendi per esiste _cout!!! Ciao

  5. #5
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381

    Re: e..

    Originariamente inviato da kirakira93
    e il la fuzione cout che stampa a seconda della definizione o meno di UNICODE.... _cout.... o una cosa el genere esiste???
    No. O meglio esiste se la crei.
    cout è definita come:
    codice:
    std::basic_ostream<char> cout;
    mentre wcout è:

    codice:
    std::basic_ostream<wchar_t> wcout;
    In teoria (ma non l'ho mai fatto) puoi creare un mycout come:
    codice:
    std::basic_ostream<TCHAR> mycout;
    ma di mio ho deprecato le stringhe ansi, pertanto uso solo UNICODE.

    P.S.
    Lo stesso vale per cin, naturalmente.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  6. #6
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Originariamente inviato da tina8
    Ho provato con wcout ma non funziona..non stampa niente..
    Tra l'altro doveva essere:
    codice:
    wcout << L"\n chiave " <<chiave;
    ma la fretta mi ha fatto saltare un carattere.

    Ho provato anche ad inserire una chiave nella mappa di ti wstring..ma mi vengono sollevati una marea di errori..il tipo wstring non può essere utilizzato come chiave in una mappa?
    Quali errori?
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  7. #7

    Re: Re: e..

    Originariamente inviato da shodan
    In teoria (ma non l'ho mai fatto) puoi creare un mycout come:
    codice:
    std::basic_ostream<TCHAR> mycout;
    Be', ma chi ti garantisce che questo venga agganciato allo standard output?

    In ogni caso, a mio avviso si fa molto prima così:
    codice:
    #ifdef _UNICODE
    #define tcout wcout
    #define tcin wcin
    #define tcerr wcerr
    #define tclog wclog
    #else
    #define tcout cout
    #define tcin cin
    #define tcerr cerr
    #define tclog clog
    #endif
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    In teoria è possibile.
    Del resto la definizione di cout (per VC++ e Borland) è:
    codice:
    typedef basic_ostream<char, char_traits<char> > ostream;
    /* Definizioni per la CRT */ ostream cout;
    solo che VC++ li ha integrati nella CRT, il che di fatto rende impossibile una dichiarazione custom (che avrebbe anche poco senso IMHO).

    Però avevo detto che non lo avevo mai fatto.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  9. #9
    Originariamente inviato da shodan
    In teoria è possibile.
    Del resto la definizione di cout (per VC++ e Borland) è:
    codice:
    typedef basic_ostream<char, char_traits<char> > ostream;
    /* Definizioni per la CRT */ ostream cout;
    solo che VC++ li ha integrati nella CRT, il che di fatto rende impossibile una dichiarazione custom (che avrebbe anche poco senso IMHO).
    Se non erro la definizione per cout e compagnia era una roba del tipo
    codice:
    extern ostream cout;
    ,
    per cui di fatto il linker va a collegare la variabile in questione a quella dichiarata nella CRT, che viene inizializzata dal codice della CRT (nello specifico, da un'istanza della classe ios_base::Init che viene creata in <iostream>). Istanziare un ostream in quella maniera, tra l'altro, è impossibile perché non ha costruttori di default, ma solo un costruttore parametrizzato che richiede un puntatore allo streambuf sottostante.
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    81
    Anche con L"\n chiave " <<chiave;
    non stampa niente. =(
    Il codice creato è il seguente:
    codice:
    void SAXPrintHandlers::endElement(const XMLCh* const name)
    {
    	int len = pathdata.size();
    	PathData elem;
    	wstring path;
    	wstring a =L"\\";
    	if(len!=0){
    	for (int index = 0; index < len; index++){
    		elem = pathdata[index];
    		path+=elem.element.data();
    		path+=a;
    			if(strcmp(StrX(name),StrX(elem.element.data()))==0){
    		pathdata.pop_back();
    		len = pathdata.size();
    		
    		}else{
    			
    			//pathdata.pop_back();
    		len = pathdata.size();
    		//path=L"";
    
    		}
    	}}else{
    	
    	
    }
    	map<wstring,vector<wstring>> mappa1;
    	map<wstring,vector<wstring>>::iterator it;
    	wstring chiave;
    	if(mappa1.size()>0){
    	for(it= mappa1.begin(); it!=mappa1.end(); it++){
    	
    	chiave=it->first;
    	
    	if(len>=2){
    		
    	vector<wstring>v1;
    	v1.push_back(elem.elementText.data());
    	mappa1[path]=v1;
    	
    	}}}else{
    	
    	vector<wstring>v1;
    	v1.push_back(elem.elementText.data());
    	mappa1[path]=v1;
    	
    	}
    }
    Non fate caso al codice è ancora in produzione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.