2013-11-25 5 views
-4

У меня есть некоторые строки кода, для которых я получаю ошибки, но я не знаю почему.Мой код не компилируется, я понятия не имею, почему

T2 at(T1 p1, T1 p2) const 
{ 
    return my_map[p1][p2]; 
} 


T2 operator() (T1 p1, T1 p2) const 
{ 
    return my_map[p1][p2]; 
} 

и код будучи в основном:

if (max * max == relation.size() && 
     1462 == distances.at("City1", "City2") && 
     1826 == cdist.at("City3", "City1")) 
{ 

    XY = cdist.size() - 
       cdist.at("City1", "City2") + 
       distances("City3", "City2"); 

} 

(Где cdist тот же объект, как расстояния, но является константной.)

Ошибка может быть простым, но я я действительно устал от этого. (Ошибка: передача «..» в качестве «этого» аргумента «..» отбрасывает квалификаторы.)

+0

Вам нужно показать все соответствующие декларации и т. Д., И какая строка кода выдает ошибку? Мы не читатели. – OldProgrammer

+0

lol. Удачи в получении ответов. Мы не экстрасенс. Поставка осмысленного кода. – sehe

+0

Представьте, что вы были кем-то другим, пытающимся решить вашу собственную проблему. Вы могли бы идентифицировать проблему с тем, что вы указали выше? – greatwolf

ответ

2

Вы не можете позвонить operator[] на карте const.

Используйте вместо этого mapvariable.at(indexer).at(another_indexer).

0

Я держу пари, потому что operator[] на std::map не является константной операцией. Вероятно, вам нужно использовать метод find() или C++ 11 at().

+1

C++ 11 добавлено http://en.cppreference.com/w/cpp/container/map/at – sehe

+1

@sehe: Это отлично подходит для тех, кто до C++ 11. И тогда это вопрос того, как вы хотите, чтобы вас уведомили, что того, чего вы просили, нет - завершите итератор или исключение. –

+0

в целом, да. Но его код использует 'return my_map [p1] [p2];', который в любом случае не терпит отсутствующих ключей :) – sehe

Смежные вопросы