PDA

Visualizza la versione completa : [C++] Errore in compilazione per conversione char* in wxString


denis76
18-02-2007, 18:15
Questa riga

wxConfig *wxconfig= new wxConfig("Applicazione");

tratta da un semplice programma che si compila senza problemi sotto Windows mi da il seguente errore sotto Linux:

/home/denis76/C++/Linux/WxPlannerClient/src/FileIniClient.cpp:6: error: conversion from 'const char [4]' to 'const wxString' is ambiguous
/usr/include/wx-2.6/wx/string.h:643: note: candidates are: wxString::wxString(wxChar, size_t) <near match>
/usr/include/wx-2.6/wx/string.h:633: note: wxString::wxString(int) <near match>
make: *** [FileIniClient.lo] Error 1
*** Uscito con stato: 2 ***

Avete idea di quale sia il problema?

XWolverineX
18-02-2007, 19:57
Sembra che nella versione di linux, la classe wxString non ha un costruttore di copia che possa convertire in wxChar implicitamente.
Prova a dichiarare un wxString, metterci dentro "Applicazione", cosi


wxString c = "Ciao"; //poi devi vedere tu come si fa.
wxConfig *wxconfig= new wxConfig(c);

oregon
18-02-2007, 20:06
Prova con

wxConfig *wxconfig= new wxConfig(_T("Applicazione"));

anche se dall'errore sembrerebbe che il problema sia in un'altra linea (infatti viene indicata una costante 'const char [4]' ...) ...

denis76
18-02-2007, 22:56
Quella riga ora è andata a posto. Grazie.

Ancora in ambiente Linux ho il problema:

wxString a;
char b[256];
strcpy(b, a);

Se tento di compilare ho il problema:

/home/denis76/C++/Linux/WxPlannerClient/src/FileIniClient.cpp:9: error: cannot convert 'wxString' to 'const char*' for argument '2' to 'char* strcpy(char*, const char*)'


Hai idea?

oregon
18-02-2007, 23:21
Dovrebbe essere

strcpy(b, a.c_str());

denis76
19-02-2007, 13:33
Ecco la soluzione:

strcpy(b, (const char*)a.c_str());

E' molto strano. Ho scritto un programma in C++ con WxDev-C++ compilato con MinGw. Sotto Windows il codice:

wxString a;
char b[256];
strcpy(b, a);

viene compilato tranquillamente mentre sotto Linux è necessario scrivere:

wxString a;
char b[256];
strcpy(b, (const char*)a.c_str());

Come mai?

oregon
19-02-2007, 13:37
Originariamente inviato da denis76
Ecco la soluzione:

strcpy(b, (const char*)a.c_str());


Cioe' quella che ti avevo indicato ...? :madai!?:

denis76
19-02-2007, 16:09
Sì, con l'aggiunta di (cost char*).

Hai idea perché il compilatore Debian sia più pignolo di MinGw?

oregon
19-02-2007, 18:02
Penso che anche senza il cast avrebbe funzionato ...

Non conosco il perche' della differenza ...

Loading