如何解决此错误?
错误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()没有参数。有什么想法吗?
答案 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;
}