Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    81

    [C++] Problemi di conversione

    Ciao a tutti..il mio problema è il seguente..si tratta di un problema di conversione.
    La classe richiamata è la seguente:
    codice:
    class StrX
    {
    public :
        // -----------------------------------------------------------------------
        //  Constructors and Destructor
        // -----------------------------------------------------------------------
        StrX(const XMLCh* const toTranscode)
        {
            // Call the private transcoding method
            fLocalForm = XMLString::transcode(toTranscode);
        }
    
        ~StrX()
        {
            XMLString::release(&fLocalForm);
        }
    
        // -----------------------------------------------------------------------
        //  Getter methods
        // -----------------------------------------------------------------------
        const char* localForm() const
        {
            return fLocalForm;
        }
    
    private :
        // -----------------------------------------------------------------------
        //  Private data members
        //
        //  fLocalForm
        //      This is the local code page form of the string.
        // -----------------------------------------------------------------------
        char*   fLocalForm;
    };
    
    inline XERCES_STD_QUALIFIER ostream& operator<<(XERCES_STD_QUALIFIER ostream& target, const StrX& toDump)
    {
        target << toDump.localForm();
        return target;
    }
    Il metodo scritto da me(che richiama la precedente) ha la seguente linea di codice mi solleva l'errore:

    impossibile convertire da 'StrX' a 'const char *'

    codice:
    const char* n= StrX(name);
    Forse chiamando StrX(name ) non viene restituito il tipo di dato const char* o c'è qualche altra funzione da utilizzare.
    Grazie e ciaoooooooooo

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Più semplicemente non c'è nessun operatore di conversione implicito.
    Dovresti aggiungere:
    codice:
    // -----------------------------------------------------------------------
    //  Getter methods
    // -----------------------------------------------------------------------
    const char* localForm() const
    {
        return fLocalForm;
    }
    // -----------------------------------------------------------------------
    //  Conversion operator
    // -----------------------------------------------------------------------
    operator char* const ()
    {
        return fLocalForm;
    }
    Personalmente, preferisco convertire i vari XMLCh* in std::wstring per essere più tranquillo.
    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
    Apr 2009
    Messaggi
    81
    Ho aggiunto il codice ma ho due problemi:

    1. Se provo a stampare il contenuto di n mi restituisce la seguente stringa fatta di trattini con un triangolo finale, ma non la stringa corretta

    2. Quando eseguo il controllo presente nell'if mi restituisce il seguente errore:

    error C2446: '==': nessuna conversione da 'const char *' a 'const wchar_t *'
    I tipi a cui si punta sono privi di relazioni. La conversione richiede reinterpret_cast, cast di tipo C o cast di tipo funzione
    c:\xerces-c-3.1.0\xerces-c-3.1.0\samples\src\saxprint\saxprinthandlers.cpp(20 1) : error C2440: '==': impossibile convertire da 'const char *' a 'const wchar_t *'

    p.s. il campo element di elem è di tipo wstring
    codice:
    for (int index = 0; index < len; index++){
    		elem = pathdata[index];
    		if(elem.element.data()==n){
    	.......}
    Hai idea di quale sia il problema...

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    error C2446: '==': nessuna conversione da 'const char *' a 'const wchar_t *'
    I tipi a cui si punta sono privi di relazioni. La conversione richiede reinterpret_cast, cast di tipo C o cast di tipo funzione
    Questo dice tutto.
    Però dovresti precisare cos'è elem.element ( XMLCh*? std::wstring? altro?), cos'è n e se c'entra la classe che hai fatto.
    Nel file che ho io non c'è traccia di quel for.
    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.

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    81
    elem.element è un elemento presente nel vettore pathdata definiti nel modo seguente:
    codice:
    public : struct PathData {
    		wstring element;
    		wstring elementText;
    			 };
    	//}elem;
    	vector<PathData> pathdata;
    Non è presente nel file che ti ho mandato perchè è nel main del progetto.
    Ti posto un pezzo di codice relativo al for:
    codice:
    void SAXPrintHandlers::endElement(const XMLCh* const name)
    {
    	int len = pathdata.size();
    	PathData elem;
    	wstring path;
    
    	const char* n= StrX(name);
    	cout<<"\n Valore di n:  "<< n;
    	for (int index = 0; index < len; index++){
    		elem = pathdata[index];
    		if(elem.element.data()==n){
    Sono stata chiara??? Ciaooooo

  6. #6
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Ti stai complicando la vita per niente.
    Introduci una conversione inutile da XMLCh* a const char* (in questa funzione) e poi cerchi di confrontare quest'ultima con una const wchar_t* (due tipi di dati non omogenei) e per di più con l'operatore == (le stringhe C non si confrontano così).

    Puoi riscrivere il tutto usando solo std::wstring ed eventualmente convertire il tutto all'ultimo momento.

    codice:
    void SAXPrintHandlers::endElement(const XMLCh* const name)
    {
            wstring n(name);
    	int len = pathdata.size();
    	PathData elem;
    	wstring path;
    
    	cout<<"\n Valore di name:  "<< Strx(name);
    	for (int index = 0; index < len; index++){
    		elem = pathdata[index];
    		if(elem.element == n) {
    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
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    81
    Allora ho provato a confrontare l'uguaglianza tra stringhe nel modo seguente, ma non funziona, ossia stampa che le stringhe sono uguali anche quando non lo sono, come devo fare per confrontare due stringhe???

    codice:
    if(strcmp(StrX(name),StrX(elem.element.data()))!=0){
    	cout<<"\n Sono uguali";
    Grazieeeeee

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    81
    Ho risolto..sbagliavo il controllo..bastava mettere ==0!!! Ciaooooooooooo

  9. #9
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Continuo a non capire il perché di questi arzigogolii con le C string, quando le stringhe C++ rendono tutto più semplice. :master:
    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.

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.