Нет жизнеспособного преобразования из 'Foo' в 'Foo * const' C ++ - PullRequest
3 голосов
/ 24 ноября 2011

У меня есть класс, который реализует граф (шаблонный класс) в C ++ (я этого не делал), и в основном я хочу сделать это, чтобы иметь представление Places (они - мои вершины) и моиребра (которые связывают их) - это расстояния (в милях).

Я объявил простое Graph<Places *, double> places;, и теперь я создаю метод, который проверяет, есть ли определенное место на графике, чтобы избежатьдубликаты.В моем графе есть метод Vertice<TV,TR>* findvert_content(const TV& v) const;, который возвращает указатель найденной вершины (поэтому, если этот возвращаемый указатель действителен, я предполагаю, что он существует в графе).Теперь я хочу сделать это в своем тестовом классе:

bool Test::verifiesName(Place *place) { 
    Vertice<Place *, double> find_place = places.findvert_content(*place);
    ...
}

Проблема в том, что это вызывает у меня семантическую проблему: «Нет жизнеспособного преобразования из« Place »в« Place * const »»не знаю, что здесь делать.

Вот код моего метода findvert (для справки):

template<class TV,class TR>
Vertice<TV,TR>* Graph<TV,TR>::findvert_content(const TV& v) const
{
    Vertice<TV,TR>* ap=graf;

    while (ap != NULL)
    {
        if (ap->vcontent == v)
            return ap ;
        else 
            ap=ap->apvertice;
    }
    return ap;
}

PS graf - это просто атрибут в моем графикекласс: Vertice<TV,TR>* graf;.

Ответы [ 2 ]

1 голос
/ 24 ноября 2011

*place - это значение по адресу, на который указывает place.Вы уверены, что хотите передать значение, а не сам указатель при вызове метода?Например:

Vertice<Place *, double> find_place = places.findvert_content(place);

Кроме того, зачем вам нужен &, если вы не изменяете v внутри метода?Затем объявите

template<class TV,class TR>
Vertice<TV,TR>* Graph<TV,TR>::findvert_content(const TV v) const

, и он должен быть совместим с вышеуказанным вызовом.

0 голосов
/ 24 ноября 2011

Тип TV в вашем places члене ожидает указатель на Place.

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