Привет. Столкнулся вот в SDK с такой проблемой. Может,кто нить из программистов поможет. Хочу выводить на экран персональное обращение к каждому игроку. Для этого использую:
CvWString fff;
CvWString ggg;
ggg = "Петр";
fff = getLeaderName(getOwnerINLINE());
if (fff == ggg)
{
... код
}
Проблема в том,что каждый раз условие не выполняется,хотя игрока зовут Петр. Весь код находится в CvCity.cpp. Может кто нить помочь?
Интересная идея для заработка
Дело тут не в С++, а в объекте CvWString, определенном в файле CvString.h.
Как таковой функции сравнения строк интерфейс объекта нам не предлагает, то следует использовать классический способ из библиотеки string.h.
Лично код не проверял, но думаю будет работать:
или такКод:CvWString fff; CvWString ggg; ggg = "Петр"; fff = getLeaderName(getOwnerINLINE()); if (strcmp(fff,ggg)==0) { ... код }
Возможно потребуется ещё привести типы исходя из сообщений компилятора.Код:CvWString fff; CvWString ggg; ggg = "Петр"; fff = getLeaderName(getOwnerINLINE()); if (strcmp(fff.GetCString(),ggg.GetCString())==0) { ... код }
Сначала подумал про концевые сиволы закрытия строк, про буквы е/ё, а ведь действительно получается, что выражение
будет давать тру только если это один и тот же объект в памяти компьютераКод:(fff == ggg)
Вот что плучается в первом случае:
CvCity.cpp
CvCity.cpp(4309) : error C2664: 'strcmp' : cannot convert parameter 1 from 'CvWString' to 'const char *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
Process terminated with status 2 (0 minutes, 8 seconds)
1 errors, 0 warnings
А вот что во втором:
CvCity.cpp
CvCity.cpp(4309) : error C2664: 'strcmp' : cannot convert parameter 1 from 'const wchar *' to 'const char *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Process terminated with status 2 (0 minutes, 7 seconds)
1 errors, 0 warnings
Интересная идея для заработка
<div class='quotetop'>Цитата(Пашок * 30.11.2008, 15:35) [snapback]270489[/snapback]</div>Думаю, тогда стоит переписать так:А вот что во втором:
CvCity.cpp
CvCity.cpp(4309) : error C2664: 'strcmp' : cannot convert parameter 1 from 'const wchar *' to 'const char *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Process terminated with status 2 (0 minutes, 7 seconds)
1 errors, 0 warnings
[/b]
Здесь используется ф-ия wcscmp, которая работает с типами wchar*, аналогичная по функциональности strcmp.Код:CvWString fff; CvWString ggg; ggg = "Петр"; fff = getLeaderName(getOwnerINLINE()); if (wcscmp(fff.GetCString(),ggg.GetCString())==0) { ... код }
Сейчас попробую. Кстати,эта функция >0 когда первое значение впереди по алфавиту?
Интересная идея для заработка
Не работает. Проект компилится без ошибок,но условие не выполняется. Может,функция getLeaderName(getOwnerINLINE()) даёт не то,что надо.Как бы это проверить... Пробовал и просто getName(getOwnerINLINE()). Равенства нет.
Интересная идея для заработка
<div class='quotetop'>Цитата(Пашок * 30.11.2008, 18:05) [snapback]270523[/snapback]</div>Мне кажется, что тут нужен ещё объект, к которому можно применить данную ф-ию. А вот какой, это нужно поискать по SDK.Не работает. Проект компилится без ошибок,но условие не выполняется. Может,функция getLeaderName(getOwnerINLINE()) даёт не то,что надо.Как бы это проверить... Пробовал и просто getName(getOwnerINLINE()). Равенства нет.
[/b]
Кстати, ещё может быть проблема с кодировками. В окне редактора "Петр" - одна последовательность байт, а в игре может быть другая.