2010-03-25 4 views
-1

Как исправить эту ошибку?Неоднозначный вызов перегруженной функции (сост. Сорт)

ошибка C2668: 'станд :: _ Tree < _Traits> :: Конец': неоднозначный вызов перегруженной функции

Мой код выглядит следующим образом:

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() не имеет параметров. Есть идеи?

+3

Он похож ' _test' - это тип, а не экземпляр (вы его typedef!). Кроме того, что такое 'my_map_t'? Требуются ли шаблонные параметры (в этом случае 'my_map_t :: const_iterator' не имеет смысла) или нет (в этом случае ваш' typedef' неверен)? –

+0

Вы правы. Я набрал этот фрагмент в спешке. Я исправился, так что теперь это имеет смысл. Я оставил my_map_t :: end() там, чтобы показать, где мое мышление было неправильным. – Joe

+0

Как мы должны отвечать на ваши вопросы, когда вы не публикуете свой фактический код? Не «набирайте фрагменты в спешке». Не набирайте фрагменты * вообще *. Покажите нам свой * фактический * код, или код, который вы подтвердили, содержит ту же проблему. Код, который вводит новые ошибки, опечатки и ошибки, затрудняет нам определять, какие из ошибок мы должны сосредоточить. – jalf

ответ

2

Из вашего кода, похоже, что my_map_t::end() является статическим (в противном случае вам нужно было бы вызвать его на экземпляре, например _test.end()). Редактировать: Джесси Бедер прав в своем комментарии к вопросу; код не имеет большого смысла, поскольку _test - это тип, а не объект.

Статические функции-члены не могут быть const-квалификацией (const-квалификация функции-члена применяется к указателю this, статические функции-члены не имеют указателя this).

+0

D'oh! Спасибо, я знал, что что-то забыл. – Joe

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; 
} 
Смежные вопросы