CString str = "123.4";
double x = atof((const char*)str.GetString());
CString в const char*
CString str = "123.4";
double x = atof( str );
Компилятор VC2005 если это имеет значение.
char str[] = "123.4";
double x = atof(str);
ну это кратенький пример, но у меня просто CString переменная связана с элементом CEdit. Это данные из CEdit'а нужно преобразовать в число.
CString str = "123.4";
double x = atof( str );
Компилятор VC2005 если это имеет значение.[/QUOTE]
Не знаю как на VC2005, а на VC2003 это можно записать и так (но вроде без разницы):
Код:
т.е. через "GetString()" получаем указатель на строку, а для полной уверености добавляем "(const char*)".
Удачи!
CString str = "123.4";
double x = atof( str );
Компилятор VC2005 если это имеет значение.[/QUOTE]
Вреш ведь. Прекрасно оно компилится в 2005 студии.
Я с тобой солидарен.
Вопрос может возникнуть в случае описания как указателя:
Код:
CString *str
Вот тут могут быть проблемы.
to Kalastiuz: Проверь как у тебя описана переменная "str". Может по коду идет описание второй одноименной переменной. И кроме того, было бы приятно услашать как именно ругается VC.
чесс слово..!!!
Код:
CString str("123.4");
double x = atof((const char*)str.GetString());
double x = atof((const char*)str.GetString());
Вот так получается. но только если определять как str("123.4")
через str = "123.4"; тоже не получается...
Возникает вопрос как мне тогда обратно преобразовать в double? =)
мне тоже вот говорят, что должно работать... я не зря компилятор привел.. может в настройках что-то где-то.... как например Warning level можно выставлять.
в общем проблема есть
Дома инета нет.. но я выпишу как ругается и обязательно процитирую тут.
Я уже знаю как - CString : undeclared identifier
приложение на основе диалогового окна
приложение на основе диалогового окна[/QUOTE]
А попробуй вот так
Код:
CString s;
s.c_str();
s.c_str();
Код:
------ Build started: Project: itof_test, Configuration: Debug Win32 ------
Compiling...
stdafx.cpp
Compiling...
itof_test.cpp
itof_testDlg.cpp
d:\atof_test\atof_testdlg.cpp(157) : error C2664: 'atof' : 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...
Build log was saved at "file://d:\atof_test\Debug\BuildLog.htm"
itof_test - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Compiling...
stdafx.cpp
Compiling...
itof_test.cpp
itof_testDlg.cpp
d:\atof_test\atof_testdlg.cpp(157) : error C2664: 'atof' : 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...
Build log was saved at "file://d:\atof_test\Debug\BuildLog.htm"
itof_test - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Далоговое окно с одним CEdit'ом и одной кнопкой. С CEdit'ом связана переменная m_strEdit.
Обработка нажатия:
Код:
void Catof_testDlg::OnBnClickedButton1()
{
double d = atof(m_strEdit);
}
{
double d = atof(m_strEdit);
}
Код:
CString s;
s.c_str();
s.c_str();
А это вроде метод std::string а не CString
Компилятора, линковщика.. ну я незнаю еще че может быть)
Попробую подойти к проблеме с другой стороны.. Посредством чего можно преобразовывать из CString в double и обратно не используя atof() ?
По средством lexical_cast. См. boost.org
Да вроде простой пример.. читает числовые данные из CEdit'а и переводит в double
неужели все так запутано? ))
у бля, юзай _tstof
в общем при создании проекта..нужно снимать галку Use Unicode Libraries
или же потом
Project -> xxx Properties (Alt+F7) -> Manifest Tool -> General -> Use UNICODE Response Files
нужно установить в No
Всем спасибо за всеразличные советы
[QUOTE=Alexandoros]у бля, юзай _tstof[/QUOTE]
попробую) спасибо