提升:错误:2次重载具有类似的转换

时间:2010-06-30 18:46:25

标签: c++ boost

我使用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 *,它就可以工作,所以我正在尝试使用包装器类来查看是否能解决问题。

1 个答案:

答案 0 :(得分:1)

使用Boost 1.43和VC2005时,这是不可重复的。为了试一试,我添加了一个虚拟类位置(你没有提供你的代码):

struct Location { Location(int, int) {} };

这让我相信这是你班Location的一个问题。你能提供它的定义吗?