对重载函数的不明确调用(常量)

时间:2010-03-25 01:05:11

标签: c++ compiler-errors

如何解决此错误?

  

错误C2668:'std :: _ Tree< _Traits> :: end':对重载函数的模糊调用

我的代码如下所示:

typedef map<int const *, float> my_map_t;
my_map_t _test;
my_map_t::const_iterator not_found = my_map_t::end();
if (_test.find(&iKeyValue) == not_found) {
    _test[iKeyValue] = 4 + 5; // not the actual code, but here for simplicity
}

编译器抱怨对my_map_t :: end()的调用不明确。这是有道理的,因为唯一的区别是返回类型。

通常,您可以通过强制转换参数来消除歧义,但end()没有参数。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

在您的代码中,my_map_t::end()似乎是静态的(否则您必须在实例上调用它,例如_test.end())。 编辑:Jesse Beder对这个问题的评论是正确的;代码没有多大意义,因为_test是一个类型,而不是一个对象。

静态成员函数不能是const限定的(成员函数的const限定适用于this指针;静态成员函数没有this指针。

答案 1 :(得分:0)

我不知道这是否恰恰说明了你的问题,因为我对如何解释这个问题有点不清楚,但这可能会有所帮助......

// BindingProblem.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <map>

typedef std::map<int*, float> my_map_t;

int _tmain(int argc, _TCHAR* argv[])
{
    int iKeyValue;

    my_map_t _test;

    my_map_t::const_iterator not_found = _test.end();

    if (_test.find(&iKeyValue) == not_found)
    {
        _test[&iKeyValue] = 4 + 5; // not the actual code, but here for simplicity
    }

    return 0;
}