Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Перевод строки в число

2.0K
13 апреля 2008 года
oleg_159
77 / / 13.04.2008
Возникает проблема перевода строки из Edit1 в целое число.
Если на форме только поле Edit1 и кнопка Butto1, то код
int n=StrToInt(Edit1->Text);
срабатывает без ошибок, но если на форме много компонентов, то выскакивают ошибки:
[C++ Warning] atlwin.h(1579): W8017 Redefinition of 'MESSAGE_HANDLER' is not identical
[C++ Error] Unit1.cpp(68): E2034 Cannot convert 'AnsiString' to 'const char *'
[C++ Error] Unit1.cpp(68): E2342 Type mismatch in parameter 'IpSrc' (wanted 'const char *', got 'AnsiString')
11
13 апреля 2008 года
oxotnik333
2.9K / / 03.08.2007
Цитата: oleg_159
Возникает проблема перевода строки из Edit1 в целое число.
Если на форме только поле Edit1 и кнопка Butto1, то код
int n=StrToInt(Edit1->Text);
срабатывает без ошибок, но если на форме много компонентов, то выскакивают ошибки:
[C++ Warning] atlwin.h(1579): W8017 Redefinition of 'MESSAGE_HANDLER' is not identical
[C++ Error] Unit1.cpp(68): E2034 Cannot convert 'AnsiString' to 'const char *'
[C++ Error] Unit1.cpp(68): E2342 Type mismatch in parameter 'IpSrc' (wanted 'const char *', got 'AnsiString')



приведенные ошибки к приведенному коду никак не соответсвуют

479
13 апреля 2008 года
Ухух
142 / / 05.05.2006
там указана 68 строка , что там? Но если это эта строка, то ошибка наведенная, надо посмотреть что там до этой строки стоит.
2.0K
14 апреля 2008 года
oleg_159
77 / / 13.04.2008
Цитата: Ухух
там указана 68 строка , что там? Но если это эта строка, то ошибка наведенная, надо посмотреть что там до этой строки стоит.



Вот код обработчика:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int n=StrToInt(Edit1->Text);//строка № 68
Label1->Caption=IntToStr(n*n);
/*
[C++ Warning] atlwin.h(1579): W8017 Redefinition of 'MESSAGE_HANDLER' is not identical
[C++ Error] Unit1.cpp(68): E2034 Cannot convert 'AnsiString' to 'const char *'
[C++ Error] Unit1.cpp(68): E2342 Type mismatch in parameter 'IpSrc' (wanted 'const char *', got 'AnsiString')
*/
}

Ответ на решение данной проблемы нашёл, если заменить
int n=StrToInt(Edit1->Text);
на
int n=Edit1->Text.ToInt();
Но почему в данном случае функция не работает? Всё дело в ней, потому как при переборе возможных вариантов выскочила ошибка, говорящая о какойто внешней ссылке 'StrToIntA'.
А вообще существуют расшифровки ошибок Билдера и способы их устранения, потому как краткий комментарий возле ошибк, иногда, мало о чём говорит.

479
14 апреля 2008 года
Ухух
142 / / 05.05.2006
А там не получалось что какой то символ не тем был или пробел вкрадывался. Иногда помогает аргумент удалить и заново ввести. А еще иногда - посмотреть что в строке дааалеко вправо.:)))
И тоже немного странноые вещи видел - в простой программе, где одна форма, с какого-то момента требуется писать Form1->Edit1->Text;
8.8K
14 апреля 2008 года
Se AD WMD
165 / / 10.01.2007
Судя из ошибок скорее всего когда скидываеш какойто из компонентов получается перегрузка функции
СтрТоИнт (в проэкт инклюдится ещё одна функция с такимже названием, но с другими параметрами вызова как минимум их 2(в 2007 с++): стандартная (из SysUtils int StrToInt(string Sconst); и из shlwapi.h int StrToInt(LPCTSTR lpSrc); - вторая кстати ругается соответствующе:
[BCC32 Error] Unit1.cpp(20): E2034 Cannot convert 'AnsiString' to 'const char *'
[BCC32 Error] Unit1.cpp(20): E2342 Type mismatch in parameter 'lpSrc' (wanted 'const char *', got 'AnsiString'))
)
Попробуй заменить
int n=StrToInt(Edit1->Text);//строка № 68
на
int n=StrToInt(Edit1->Text.c_str());//строка № 68

З.Ы. StrToIntA прописана в shlwapi.h так:
#define StrToInt StrToIntA
поэтому стртоинт сразу идёт на стртоинта и использование namespace както int n=Sysutils::StrToInt(Edit1->Text); приведёт к ошибке что стртоинта не является функцией в сисутилз

Вывод: чтобы всё заработало надо добавить одну строчку:
#undef StrToInt
и будет тебе счастье
2.0K
15 апреля 2008 года
oleg_159
77 / / 13.04.2008
Цитата: Se AD WMD
Судя из ошибок скорее всего когда скидываеш какойто из компонентов получается перегрузка функции
СтрТоИнт (в проэкт инклюдится ещё одна функция с такимже названием, но с другими параметрами вызова как минимум их 2(в 2007 с++): стандартная (из SysUtils int StrToInt(string Sconst); и из shlwapi.h int StrToInt(LPCTSTR lpSrc); - вторая кстати ругается соответствующе:
[BCC32 Error] Unit1.cpp(20): E2034 Cannot convert 'AnsiString' to 'const char *'
[BCC32 Error] Unit1.cpp(20): E2342 Type mismatch in parameter 'lpSrc' (wanted 'const char *', got 'AnsiString'))
)
Попробуй заменить
int n=StrToInt(Edit1->Text);//строка № 68
на
int n=StrToInt(Edit1->Text.c_str());//строка № 68

З.Ы. StrToIntA прописана в shlwapi.h так:
#define StrToInt StrToIntA
поэтому стртоинт сразу идёт на стртоинта и использование namespace както int n=Sysutils::StrToInt(Edit1->Text); приведёт к ошибке что стртоинта не является функцией в сисутилз

Вывод: чтобы всё заработало надо добавить одну строчку:
#undef StrToInt
и будет тебе счастье




Если написать:
int n=StrToInt(Edit1->Text.c_str());//строка №68
то ругается по-другому:
[C++ Warning] atlwin.h(1579): W8017 Redefinition of 'MESSAGE_HANDLER' is not identical
[Linker Error] Unresolved external 'StrToIntA' referenced from C:\...адрес UNIT1.OBJ

Как я понял, строка:
#undef StrToInt
аннулирует функцию StrToInt(), чтобы не было конфликта с функцией аналогичного названия, но другими параметрами?

Но #undef StrToInt - это лишняя строка кода, может по-проще использовать функцию ToInt() ?

2.0K
15 апреля 2008 года
oleg_159
77 / / 13.04.2008
Цитата: Ухух
А там не получалось что какой то символ не тем был или пробел вкрадывался. Иногда помогает аргумент удалить и заново ввести. А еще иногда - посмотреть что в строке дааалеко вправо.:)))
И тоже немного странноые вещи видел - в простой программе, где одна форма, с какого-то момента требуется писать Form1->Edit1->Text;




В данном случае Form1-> не помогает

11
15 апреля 2008 года
oxotnik333
2.9K / / 03.08.2007
делай через TryStrToInt и не парься

[QUOTE=BCB Help]
Converts an AnsiString that represents an integer (decimal or hex notation) to a number with Boolean success code.

Unit

SysUtils

Category

type conversion routines

extern PACKAGE bool __fastcall TryStrToInt(const AnsiString S, int &Value);

Description

TryStrToInt converts the string S, which represents an integer-type number in either decimal or hexadecimal notation, into a number, which is assigned to Value. If S does not represent a valid number, TryStrToInt returns false; otherwise TryStrToInt returns true.
[/QUOTE]
8.8K
15 апреля 2008 года
Se AD WMD
165 / / 10.01.2007
Цитата:

Но #undef StrToInt - это лишняя строка кода, может по-проще использовать функцию ToInt() ?


В билдере такое понятие как лишняя строка кода отсутствует принципиально. У тебя и так приложение только с одной формой со старта будет весить кб 500. так что строчкой больше строчкой меньше....

Цитата:
[Linker Error] Unresolved external 'StrToIntA' referenced from C:\...адрес UNIT1.OBJ


нехватает #pragma link "чётотам" что такое чётотам трудно сказать, в моём примере это shlwapi.lib а тебе надо самому смотреть...

Цитата:
[C++ Warning] atlwin.h(1579): W8017 Redefinition of 'MESSAGE_HANDLER' is not identical


Redefinition of 'x' is not identical (W8017)

(Command-line option to suppress warning: -w-dup)

Your source file redefined the macro 'ident' using text that was not exactly the same as the first definition of the macro.

The new text replaces the old.

'MESSAGE_HANDLER' переопределяется с другими параметрами.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог