Повышение: ошибка: 2 перегрузки имеют похожие преобразования - PullRequest
1 голос
/ 30 июня 2010

Я в основном новичок в использовании 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 *, поэтому я экспериментирую с классом-оберткой, чтобы посмотреть, решит ли это проблему.

1 Ответ

1 голос
/ 01 июля 2010

Это не воспроизводится при использовании Boost 1.43 и VC2005.Чтобы попробовать это, я добавил фиктивный класс Location (вы не предоставили его с вашим кодом):

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

Это заставляет меня поверить, что это проблема с вашим классом Location.Не могли бы вы дать его определение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...