Форум программистов, компьютерный форум CyberForum.ru

Ошибка приведения типов в MSVS 2008 - C++

Восстановить пароль Регистрация
 
AlexandrD
4 / 4 / 0
Регистрация: 26.03.2010
Сообщений: 28
07.08.2010, 02:54     Ошибка приведения типов в MSVS 2008 #1
Код
 for (AuraEffectList::const_iterator i.........
.............
if (i==((AuraEffectList::const_iterator)NULL))
в линуксе компилируется нормально в виндовсе выскакивает ошибка
error C2440: приведение типов: невозможно преобразовать 'int' в 'std::list<_Ty>::_Const_iterator<_Secure_validation>'

ну я так понимаю потому что NULL = 0 он и пишет про int как избавится?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
abiprofi
 Аватар для abiprofi
48 / 48 / 2
Регистрация: 04.08.2010
Сообщений: 110
07.08.2010, 03:55     Ошибка приведения типов в MSVS 2008 #2
Как то так:
C++
1
2
3
4
5
6
7
8
9
 char array [] = { 'x', 'l', 'x', 't', 's', 's' };
 
 list<char> str (array, array + 6);
 list<char>::iterator i;
 
 for (i = str.begin(); i != str.end(); i++)
 {
  if(*i == 0){ShowMessage("   ");}
 }
Поставь * перед i
AlexandrD
4 / 4 / 0
Регистрация: 26.03.2010
Сообщений: 28
07.08.2010, 07:08  [ТС]     Ошибка приведения типов в MSVS 2008 #3
Ну такая проверка я так понял есть уже, вот полная проверка

C++
1
2
if (i==((AuraEffectList::const_iterator)NULL)  || !(*i) || ((*i)->GetMiscValue() & schoolMask)==0))
    continue;
!(*i) - это наверное как раз одно и то же что и *i == 0
или я ошибаюсь? просто исключить первое условие проверки? или сделать так?
C++
1
2
if ((*i==NULL)  || !(*i) || ((*i)->GetMiscValue() & schoolMask)==0))
    continue;
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
07.08.2010, 17:57     Ошибка приведения типов в MSVS 2008 #4
Итератор - "вещь в себе", далеко не всегда это просто указатель. Поэтому его не всегда можно (и никогда не нужно) сравнивать с литералами, а только с такими же итераторами. Для перебора контейнера итераторы сравниваются с .end()
abiprofi
 Аватар для abiprofi
48 / 48 / 2
Регистрация: 04.08.2010
Сообщений: 110
07.08.2010, 18:54     Ошибка приведения типов в MSVS 2008 #5
В данном примере получим TRUE1 и TRUE3!!!
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int *p;
 p = (int*)malloc(10*sizeof(int));//new int[10];
 *p = 0;
 if(*p==0)
 {
  ShowMessage("TRUE1");//Label1->Caption =  "true";//это истина
 }
 if(*p)
 {
  ShowMessage("TRUE2");//Label2->Caption =  "true";//это не сработает
 }
 if(!*p)
 {
  ShowMessage("TRUE3");//Label3->Caption =  "true";//это истина
 }
 free(p); //delete [] p;
В данном примере получим TRUE2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int *p;
 p = (int*)malloc(10*sizeof(int));//new int[10];
 //*p = 0;ВНИМАНИЕ СЮДА!!!
 if(*p==0)
 {
  ShowMessage("TRUE1");//Label1->Caption =  "true";//это не сработает
 }
 if(*p)
 {
  ShowMessage("TRUE2");//Label2->Caption =  "true";//это истина
 }
 if(!*p)
 {
  ShowMessage("TRUE3");//Label3->Caption =  "true";//это не сработает
 }
 free(p); //delete [] p;
То что я показал и то что сравнивается у тебя разные вещи!!!

Добавлено через 11 минут
Господин Niсk Alte абсолютно прав!!!

Хотя это сработает:

C++
1
2
3
4
5
6
7
8
9
 char array [] = {0, 'l', 'x', 't', 's', 's' };
 
 list<char> str (array, array + 6);
 list<char>::iterator i;
 
 for (i = str.begin(); i != str.end(); i++)
 {
  if(*i == 0){ShowMessage("Чушь, но приятно");}//ЭТО СРАБОТАЕТ!!!
 }
Yandex
Объявления
07.08.2010, 18:54     Ошибка приведения типов в MSVS 2008
Ответ Создать тему
Опции темы

Текущее время: 14:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru