C ++ std :: map Ошибка списка инициализатора

0
   std::map <ODParserETag ,std::function<void()>> procedure_map;

С

procedure_map = { {ODParserETag::ActorListETag, onUndefinedTag }, {ODParserETag::AdvancedWorkerETag, onUndefinedTag }, {ODParserETag::animationETag, onUndefinedTag }};

Ошибка с ошибкой:

/usr/include/c++/4.8/bits/stl_map.h:300:7: note:   no known conversion for argument 1 from ‘<brace-enclosed initializer list> to ‘std::initializer_list<std::pair<const ODParserETag, std::function<void()> > >

и onU-T * void ODParserXml :: onUndefinedTag();

Есть ли какой-либо контейнер карты, который бы возвращал определенное значение по умолчанию для каждого ключа? (например, onUndefinedTag() в этом примере)...?

  • 0
    Я думаю, что этот тип инициализации выполняется только в C ++ 11. Вы используете C ++ 11 или C ++ 03?
  • 0
    @ArunMu, поскольку ошибка компилятора показывает std::function std::initializer_list / std::function , вы можете видеть, что это C ++ 11. @paul есть ли шанс, что onUndefinedTag является нестатической функцией-членом класса?
Теги:
std
map

1 ответ

2

Функции-члены не являются функциями, так как их можно вызвать только с помощью объекта.

Коротким маршрутом было бы использование лямбда-функции:

ODParserXml parser (...);
....

procedure_map[ODParserETag::ActorListETag] = [&] { parser.onUndefinedTag(); };

Смотрите также


Вот какой код для мастеринга (см. Http://ideone.com/iIEIiC):

#include <iostream>
#include <map>
#include <functional>

int main() {
    std::map<int, std::function<void()>> funs;
    funs[0] = [] { std::cout << "0\n"; };
    funs[1] = [] { std::cout << "1\n"; };

    funs[0]();
    funs[1]();
    funs[0]();
    return 0;
}
  • 0
    Вы можете «назначить» список инициализаторов для инициализированной переменной. Это вызывает конструктор копирования для временного объекта, созданного из списка braced-init-list. Кроме того, для функций-членов я получил другую ошибку в GCC 4.8.
  • 0
    Вы правы, я снова это убрал.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню