2015-04-04 4 views
-2

Я понимаю, что это вызвано const type self.at(idx), но не знаю, как исправить это в таком статическом методе.Как вернуть тип const в статическом методе?

template<class Key, class Val> 
struct map_item 
{ 
    typedef std::map<Key,Val> Map; 

    static Val& get(Map const& self, const Key idx) { return self.at(idx); } 
} // is it legal to be static? but I need 'static' 

Ошибка:

error: invalid initialization of reference of type ‘std::basic_string<char>&’ from expression of type ‘const mapped_type {aka const std::basic_string<char>}’ 
    static Val& get(Map const& self, const Key idx) { return self.at(idx); } 
+0

Ваш вопрос не имеет смысла. Что вы на самом деле пытаетесь сделать? –

+0

Вы должны отправить строку, откуда исходит ошибка. – texasbruce

+0

@texasbruce: Он сделал. –

ответ

1

Просто зафиксировать тип возвращаемого значения:

static const Val& get(Map const& self, const Key idx) { return self.at(idx); } 
//  ^^^^^ 

Объяснение это все в сообщении об ошибке вы публикуемую (курсив добавлен):

error: invalid initialization of reference of type ‘std::basic_string<char>&’ from expression of type ‘const mapped_type {aka const std::basic_string<char>}’

at() возвращает const Val&, но вы пытались вернуть Val&, и такого неявного преобразования нет. Вам просто нужно изменить тип возврата вашего get() в соответствии с типом возврата at().

+2

@vsoftco Потому что 'self' является' Map const & ', а не' Map & '. – Barry

+0

Вы правы, я пробовал, просто пропустил что-то еще. – knh170

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