没有可行的从'Foo'到'Foo * const'C ++的转换

时间:2011-11-23 21:37:53

标签: c++ const

我有一个用C ++实现图形(模板类)的类(我没有做到这一点),基本上我想做的是表示Places(它们是我的顶点)和我的边(链接它们)是距离(以英里为单位)。

我声明了一个简单的Graph<Places *, double> places;,现在我正在创建一个方法来检查图中是否已经存在某个Place以避免重复。我的图有一个方法Vertice<TV,TR>* findvert_content(const TV& v) const;,它返回一个它找到的顶点的指针(所以如果返回指针有效,我假设它存在于图中)。现在我想在我的Test类中执行此操作:

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;
}

P.S。 graf只是我的Graph类中的一个属性:Vertice<TV,TR>* graf;

2 个答案:

答案 0 :(得分:1)

*placeplace指向的地址的值。在调用方法时,您确定要传递值而不是指针本身吗?像:

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

另外,为什么你需要&amp;如果你没有在方法中修改v?然后声明

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

它应与上述调用兼容。

答案 1 :(得分:0)

TV成员中的places类型需要指向Place的指针。