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

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

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

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

07.08.2010, 02:54. Просмотров 577. Ответов 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++
Приветсвую. Столкнулся с такой проблемой, точнее не с проблемой а с вопросом. допустим: имеется функция Function; void Function( double...

Конвертировать с MsVS 2008 в MsVS 2010 - C++
У меня есть проект на MsVS 2008. Он состоит с нескольких файлов, которые потом подключаются в основной программе. Как можно сделать чтобы...

Стили приведения типов - C++
Строка 38: что за странное объявление? Обычно аргументы заключаются в скобки. Строка 39: что за static_cast и последующий &lt;Complex&gt;? Как...

Перегрузка операторов приведения типов - C++
Доброго времени суток! Возник вопрос по перегрузке оператора преобразования типа const char*. Вот пример: class Integer { public: ...

Исправьте ошибку C2664 приведения типов - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;conio.h&gt; using namespace std; void statistics(char...

Почему следует избегать явного приведения типов? (по возможности) - C++
Почему следует избегать явного приведения типов? (по возможности)

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
abiprofi
48 / 48 / 2
Регистрация: 04.08.2010
Сообщений: 110
07.08.2010, 03:55 #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  [ТС] #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
Эксперт С++
1636 / 1008 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
07.08.2010, 17:57 #4
Итератор - "вещь в себе", далеко не всегда это просто указатель. Поэтому его не всегда можно (и никогда не нужно) сравнивать с литералами, а только с такими же итераторами. Для перебора контейнера итераторы сравниваются с .end()
abiprofi
48 / 48 / 2
Регистрация: 04.08.2010
Сообщений: 110
07.08.2010, 18:54 #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("Чушь, но приятно");}//ЭТО СРАБОТАЕТ!!!
 }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.08.2010, 18:54
Привет! Вот еще темы с ответами:

Используя перегрузку, написать функцию для выполнения приведения типов - C++
Используя перегрузку, написать функцию для выполнения, приведения типов, для следующих типов данных float, int, double, long.

Не могу вызвать функцию из dll С++ в С# в системе Win 7 64bit, MSVS 2008 - C++
Здравствуйте! Уже два дня не могу вызвать функцию из dll C++ в программе, написанная в C#. Программа пишется в MS VS 2008 Win 7 64bit. ...

Константные и не константные ссылки. Приведения типов. Нужно уточнение - C++
Не очень понимаю в чем различие (2,3 строчки). int x = 10; double &amp;y = x; const double &amp;y = x; Почему для не...

Неправильная конвертация типов в MVS С++ 2008 - C++
Скажите, почему в Microsoft Visual Studio 6 результатом программы double r1=1.12; double r2=1.13; int c; c=100*r2 - 100*r1; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.08.2010, 18:54
Ответ Создать тему
Опции темы

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