C++ новичок здесь. Я закончил делать проект, используя Bloodshed Dev C++, и теперь я хочу сделать его проектом Visual C++, потому что я хочу узнать, как использовать OpenGL в нем, и большинство учебников используют позже для демонстрации.Visual C++ не может скомпилировать векторную вставку()
Хотя незнаком с ним, я использовал vector
управлять динамический массив указателей на объекты, которые привели меня к использованию insert()
и erase()
, не имея каких-либо знаний iterator
с вообще, так что не быть резким с моим вопросом , Проблема заключается в том, что я вставляю новый элемент в вектор, используя вычисляемый int
, чтобы указать позицию, которую нужно вставить (хотя я уверен, что это не то, что вызывает ошибку компилятора -> см. Конец сообщения). Линия (здесь и далее я заменил реальные имена с примерами):
vectorExample.insert(vectorExample.begin() + position, NULL);
Все компилируется и работает без каких-либо проблем в Dev C++ но в Visual C++, когда я пытаюсь скомпилировать эту строку Я получаю следующие ошибки (он компилирует без него и программа работает для всего остального):
1>c:\program files\microsoft visual studio 10.0\vc\include\xmemory(208): error C2440: 'initializing' : cannot convert from 'int' to 'ClassExample *'
1> Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
1> c:\program files\microsoft visual studio 10.0\vc\include\xmemory(280) : see reference to function template instantiation 'void std::allocator<_Ty>::construct<int>(ClassExample **,_Other &&)' being compiled
1> with
1> [
1> _Ty=ClassExample *,
1> _Other=int
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\vector(668) : see reference to function template instantiation 'void std::_Cons_val<std::allocator<_Ty>,ClassExample*,int>(_Alloc &,_Ty1 *,_Ty2 &&)' being compiled
1> with
1> [
1> _Ty=ClassExample *,
1> _Alloc=std::allocator<ClassExample *>,
1> _Ty1=ClassExample *,
1> _Ty2=int
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\vector(688) : see reference to function template instantiation 'void std::vector<_Ty>::emplace_back<int>(_Valty &&)' being compiled
1> with
1> [
1> _Ty=ClassExample *,
1> _Valty=int
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\vector(675) : see reference to function template instantiation 'std::_Vector_iterator<_Myvec> std::vector<_Ty>::emplace<int>(std::_Vector_const_iterator<_Myvec>,_Valty &&)' being compiled
1> with
1> [
1> _Myvec=std::_Vector_val<ClassExample *,std::allocator<ClassExample *>>,
1> _Ty=ClassExample *,
1> _Valty=int
1> ]
1> c:\users\user\desktop\mycppproject\mycppfile.cpp(412) : see reference to function template instantiation 'std::_Vector_iterator<_Myvec> std::vector<_Ty>::insert<int>(std::_Vector_const_iterator<_Myvec>,_Valty &&)' being compiled
1> with
1> [
1> _Myvec=std::_Vector_val<ClassExample *,std::allocator<ClassExample *>>,
1> _Ty=ClassExample *,
1> _Valty=int
1> ]
Я смотрел на примеры и поиск в течение двух дней подряд, и я не могу найти ничего похожего на мою проблему. Я также попытался:
vectorExample.insert(vectorExample.begin(), NULL);
, но я все еще получаю те же самые ошибки. Я делаю что-то неправильно?
Это см ms, вы не можете просто перевернуть NULL вместо указателя NULL. Просто гадать. – BWG
Черт, да, на самом деле это указатель. Я просто инициализировал ClassExample * ptr = NULL; перед линией и сделал ее в vectorExample.insert (vectorExample.begin() + position, ptr); и он работал/facepalm – Devez
Рад, что я мог бы помочь! – BWG