У меня такой вопрос, решил реализовать динамически расширяемый вектор со значениями собственного класса. Но при компиляции выдается ошибка. Я так понял, что проблема в типе значения - классе. Может чего-то я не понял. Вообще можно ли использовать свои классы как типы?
Code
std::vector<Axis_Math::cVector3<float>> vertexs; //... std::vector<Axis_Math::cVector3<float>>::iterator iter = vertexs.begin(),iter_end = vertexs.end(),iter1;
iter1 = std::find(iter,iter_end,index); // index - индекс вершины,выдает ошибку //...
>> - ставь пробел между этими символами. Компилятор старается отхватить максимальный кусок кода для интерпретации. Если нет пробела, то запись будет воспринята как оператор сдвига. Правильный пример: std::vector<std::vector<int> > - пробел есть
Учитесь писать, что за ошибка выдаётся. Телепатов не существует. Не превращайте форум в чат. Пишите более развернуто и понятно - всё равно вас попросят объяснить подробнее. Алгоритмы, программирование, оптимизация, тестирование, ведение проектов. Ищу художника, дизайнера, тестера, программистов С и С++ Обучаю процессам разработки и программированию.
Сообщение отредактировал froex - Пятница, 02 Сентября 2011, 17:20
1>d:\program files\microsoft visual studio 9.0\vc\include\algorithm(40) : error C2679: бинарный '==': не найден оператор, принимающий правый операнд типа 'const short' (или приемлемое преобразование отсутствует) 1> e:\проекты команды\движок\прототип\axis engine alpha\axis engine alpha\cvector3.h(119): может быть 'bool Axis::Axis_Math::cVector3<Tx>::operator ==(const Axis::Axis_Math::cVector3<Tx> &)' 1> with 1> [ 1> Tx=float 1> ] 1> при попытке сопоставить список аргументов '(Axis::Axis_Math::cVector3<Tx>, const short)' 1> with 1> [ 1> Tx=float 1> ] 1> d:\program files\microsoft visual studio 9.0\vc\include\algorithm(74): см. ссылку на создание экземпляров функции шаблон при компиляции "_InIt std::_Find<std::_Vector_iterator<_Ty,_Alloc>,short>(_InIt,_InIt,const short &)" 1> with 1> [ 1> _InIt=std::_Vector_iterator<Axis::Axis_Math::Vector3f,std::allocator<Axis::Axis_Math::Vector3f>>, 1> _Ty=Axis::Axis_Math::Vector3f, 1> _Alloc=std::allocator<Axis::Axis_Math::Vector3f> 1> ] 1> e:\проекты команды\движок\прототип\axis engine alpha\axis engine alpha\cvertexbuffer.cpp(76): см. ссылку на создание экземпляров функции шаблон при компиляции "_InIt std::find<std::_Vector_iterator<_Ty,_Alloc>,short>(_InIt,_InIt,const short &)" 1> with 1> [ 1> _InIt=std::_Vector_iterator<Axis::Axis_Math::Vector3f,std::allocator<Axis::Axis_Math::Vector3f>>, 1> _Ty=Axis::Axis_Math::Vector3f, 1> _Alloc=std::allocator<Axis::Axis_Math::Vector3f> 1> ]
Quote (froex)
std::vector<std::vector<int> > - пробел есть
Я и так и через typedef.
Сообщение отредактировал Техник - Пятница, 02 Сентября 2011, 17:35
Не разбираюсь в сообщениях Visual Studio ничуть. Такой вопрос возник. vertexs - это ведь массив векторов. Я не помню, для контейнера vector определён оператор "=="? Ведь, чтобы использовать std::find(), необходимо определение операторов "==" и "!=":
Code
template<class InputIterator, class T> InputIterator find ( InputIterator first, InputIterator last, const T& value ) { for ( ;first!=last; first++) if ( *first==value ) break; return first; }
Не превращайте форум в чат. Пишите более развернуто и понятно - всё равно вас попросят объяснить подробнее. Алгоритмы, программирование, оптимизация, тестирование, ведение проектов. Ищу художника, дизайнера, тестера, программистов С и С++ Обучаю процессам разработки и программированию.
Техник, я думаю, что проблема именно в неопределенном логическом операторе над типом. Axis_Math::cVector3 - я не могу найти спецификацию по этому классу. Можешь дать информацию, где копать? Я просто не могу помочь, т.к. не работал с этим классом. Если будет документация какая-то, то можно будет подумать.
Как выглядит std::find() я тебе написал. Подробней можешь на cplusplus.com посмотреть. Если Axis_Math::cVector3 - это массив, то std::find() не сможет работать с ним без определения логических операторов (сравнение и отрицание сравнения).
В общем, жду информации касательно Axis_Math::cVector3 :P Не превращайте форум в чат. Пишите более развернуто и понятно - всё равно вас попросят объяснить подробнее. Алгоритмы, программирование, оптимизация, тестирование, ведение проектов. Ищу художника, дизайнера, тестера, программистов С и С++ Обучаю процессам разработки и программированию.
Axis_Math::cVector3f - это мой собственный класс 3d вектора в моем движке. Операторы проверки равенства и неравенства реализованы. Как работает find() я знаю, кратко, есть итераторная пара между которыми происходит поиск. Первый итератор сравнивается со значением третьего параметра.
Техник, скажи, пожалуйста, index какого типа? Не превращайте форум в чат. Пишите более развернуто и понятно - всё равно вас попросят объяснить подробнее. Алгоритмы, программирование, оптимизация, тестирование, ведение проектов. Ищу художника, дизайнера, тестера, программистов С и С++ Обучаю процессам разработки и программированию.
Ты Axis_Math::cVector3 сравниваешь с short, получается. Не превращайте форум в чат. Пишите более развернуто и понятно - всё равно вас попросят объяснить подробнее. Алгоритмы, программирование, оптимизация, тестирование, ведение проектов. Ищу художника, дизайнера, тестера, программистов С и С++ Обучаю процессам разработки и программированию.