GetDlgItemText ATOI Problem
-
Hallo zusammen
Ich habe ein kleines Problem und hoffe, dass Ihr mir kurz auf die Sprünge helfen könnt

Erstmal mein Code:
..... void Ctest1Dlg::OnBnClickedBerechnen() { GetDlgItemText ( IDC_BREITE , m_strBreite ) ; GetDlgItemText ( IDC_LAENGE , m_strLaenge ) ; m_dBreite = atoi (m_strBreite); m_dLaenge = atoi (m_strLaenge); } ......Wenn ich dies nun kompilieren will, kommt folgender Fehler:
c:\dokumente und einstellungen\kaspar\eigene dateien\visual studio 2005\projects\test1\test1\test1dlg.cpp(173) : error C2664: 'atoi' : cannot convert parameter 1 from 'CString' to 'const char *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
c:\dokumente und einstellungen\kaspar\eigene dateien\visual studio 2005\projects\test1\test1\test1dlg.cpp(174) : error C2664: 'atoi' : cannot convert parameter 1 from 'CString' to 'const char *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
Generating Code...Naja ich bin eine ziemlicher neuling was C++ angeht, also bitte ich um ein wenig Verständnis, falls es sich um einen volkommen dummen Fehler handelt

Danke im Voraus!
Gruss Kaspar
-
*grübelt* Eigentlich hat CString doch eine Umwandlung in char* definiert. Es könnte höchstens sein, daß dein Projekt im UNICODE-Modus steht, in dem Fall mußt du auch die wchar-Version von atoi verwenden - die nennt sich
_ttoi().
-
grübeln ist hier angesagt,
das mit dem unicode ist ein ganz guter Hinweis,
aber der compiler meldet eine fehlenden cast zu const char*
vieleicht gehts so ?
m_dBreite = atoi ( (const char*) m_strBreite);
d.H. der cast muss nun explizied angegeben werden.
-
Vielen Dank für eure raschen Antworten!
Es lag anscheinend tatsächlich daran, dass die Unicode Checkbox beim erstellen des Projektes aktiviert war (habe da alles so gelassen wie es Standartmässig definiert war), so hat es nun mit _ttoi(); funktioniert.
Also vielen Dank für die Hilfe!P.S. Sollte ich bei weiteren Projekten "Unicode" rausnehmen?
-
Kaspar schrieb:
P.S. Sollte ich bei weiteren Projekten "Unicode" rausnehmen?
Kurzfristig vielleicht. Langfristig solltest du dich damit beschäftigen, was UNICODE ist

@Frank: Gute Lösung, nur ziemlich nutzlos - entweder du arbeitest mit ANSI-Strings, dann brauchst du diesen Cast nicht, oder du arbeitest mit UNICODE-Strings, dann ist atoi() einfach die falsche Funktion für diese Aufgabe (und der Cast bewirkt nur, daß der Code durch den Compiler kommt, aber letztlich falsche Werte zurückgibt).
-
Ja danke,
ich war nur von der falschen Compilermeldung irritiert ...
-
Noch nicht mal die compilermeldung war falsch

kurz: ich war irritiert ;-))