Я в основном новичок в использовании Boost.Я пытаюсь использовать ptr_vector для обработки некоторых объектов, которые я создал.
В частности, я определил класс Location, который определяет конкретный узел на карте (простой 2D-макет игры).Я определил ptr_vector для хранения набора Locations, которые имеют значение для вызывающей функции (узлы с единицами на них).В коде:
boost::ptr_vector<Location> find_targets(int b_hash) {
boost::ptr_vector<Location> targets;
//find a node with variables row and col defining its position
targets.push_back(new Location(row,col));
//find and push more targets
return targets;
}
Когда я пытаюсь скомпилировать это, даже без вызова этой функции, я получаю следующую ошибку:
ошибка C2666: 'boost :: scoped_array :: operator []': 2 перегрузки имеют похожие преобразования boost \ ptr_container \ detail \ scoped_deleter.hpp 81
У кого-нибудь есть идеи?Я не могу найти какую-либо соответствующую помощь в Интернете, но я буду продолжать искать в настоящее время.
РЕДАКТИРОВАТЬ: Подробнее
Я использую Boost 1.43.0 в Visual Studio 2005.
Это самый простой тест, который я мог бы сделать, который дал бы эту ошибку.
#include "Location.h"
#include <boost\ptr_container\ptr_vector.hpp>
boost::ptr_vector<Location> find_targets()
{
boost::ptr_vector<Location> targets;
targets.push_back(new Location(1,1));
targets.push_back(new Location(2,1));
return targets;
}
int main(int argc, char **argv)
{
boost::ptr_vector<Location> t = find_targets();
}
И класс Location
class Location {
// variables //
private :
int _row;
int _col;
public :
// functions //
private :
public :
Location() {_row = 0;_col = 0;}
Location(int r, int c) { _row = r; _col = c;}
~Location(){};
int get_row() {return _row;}
int get_col() {return _col;}
};
Ошибка возникает с любым ptr_vector длялюбой тип T, который я использую.Это происходит только тогда, когда я пытаюсь вернуть ptr_vector.Это работает, если я возвращаю ptr_vector *, поэтому я экспериментирую с классом-оберткой, чтобы посмотреть, решит ли это проблему.