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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
AlexandrD
4 / 4 / 0
Регистрация: 26.03.2010
Сообщений: 28
#1

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

07.08.2010, 02:54. Просмотров 575. Ответов 4
Метки нет (Все метки)

Код
 for (AuraEffectList::const_iterator i.........
.............
if (i==((AuraEffectList::const_iterator)NULL))
в линуксе компилируется нормально в виндовсе выскакивает ошибка
error C2440: приведение типов: невозможно преобразовать 'int' в 'std::list<_Ty>::_Const_iterator<_Secure_validation>'

ну я так понимаю потому что NULL = 0 он и пишет про int как избавится?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.08.2010, 02:54     Ошибка приведения типов в MSVS 2008
Посмотрите здесь:
C++ Двумерный массив - ошибка приведения типов
C++ Конвертировать с MsVS 2008 в MsVS 2010
Стили приведения типов C++
C++ Перегрузка операторов приведения типов
Исправьте ошибку C2664 приведения типов C++
Почему следует избегать явного приведения типов? (по возможности) C++
C++ Используя перегрузку, написать функцию для выполнения приведения типов
Не могу вызвать функцию из dll С++ в С# в системе Win 7 64bit, MSVS 2008 C++
Константные и не константные ссылки. Приведения типов. Нужно уточнение C++
C++ Неправильная конвертация типов в MVS С++ 2008
C++ MSVS ошибка setlocale при работе с указателями на массивы
Два динамич. массива, размер увеличивается+1. MSVS ошибка C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,930
Завершенные тесты: 1
07.08.2010, 17:57     Ошибка приведения типов в MSVS 2008 #4
Итератор - "вещь в себе", далеко не всегда это просто указатель. Поэтому его не всегда можно (и никогда не нужно) сравнивать с литералами, а только с такими же итераторами. Для перебора контейнера итераторы сравниваются с .end()
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
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru