我使用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
有人有什么想法吗?我在网上找不到任何相关的帮助,但我会继续寻找同一时间。
编辑:更多详情
我在Visual Studio 2005上使用Boost 1.43.0。
这是我能做的最简单的测试,会产生这个错误。
#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();
}
位置等级
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;}
};
对于我使用的任何类型T,任何ptr_vector都会发生错误。它只发生在我尝试返回ptr_vector时。如果我返回一个ptr_vector *,它就可以工作,所以我正在尝试使用包装器类来查看是否能解决问题。
答案 0 :(得分:1)
使用Boost 1.43和VC2005时,这是不可重复的。为了试一试,我添加了一个虚拟类位置(你没有提供你的代码):
struct Location { Location(int, int) {} };
这让我相信这是你班Location
的一个问题。你能提供它的定义吗?