Ошибка функции инициализатора статической карты - PullRequest
1 голос
/ 24 ноября 2011

Я получаю следующую базовую ошибку:

1> c: \ program files \ microsoft visual studio 10.0 \ vc \ include \ utility (163): ошибка C2436: 'second': функция-членили вложенный класс в списке инициализатора конструктора

Так же, как и множество ошибок здесь - я понятия не имею, где искать или что идет не так.(Я знаю, что это за функции, но я не могу понять, почему это не работает)

Часть заголовка:

typedef void *DuplicateFn(pTree&, const pTree&); 
enum DuplicateTy {
    SKIP,
    OVERWRITE,
    ASK
};
typedef std::map<DuplicateTy, DuplicateFn> DuplicateMapTy;

static const DuplicateMapTy DuplicateFns;
static DuplicateMapTy DuplicateFns_INIT();

подробное пространство имен:

namespace detail {
    void OverWriteFn(GMProject::pTree& tOut, const GMProject::pTree& tIn);
    void AskFn(GMProject::pTree&  tOut, const GMProject::pTree& tIn);
}

Исходная часть:

GMProject::DuplicateMapTy GMProject::DuplicateFns_INIT() {
    DuplicateMapTy tmp;
    auto p(std::make_pair(GMProject::OVERWRITE, &detail::OverWriteFn));
    tmp.insert(p); //offending line
    return tmp;
}
const GMProject::DuplicateMapTy GMProject::DuplicateFns(GMProject::DuplicateFns_INIT());

Как я уже сказал, я слепо смотрю на это, почему я не могу вставить эту пару в карту?Я просто вставляю указатель функции и перечисление?

1 Ответ

0 голосов
/ 24 ноября 2011

Я могу ошибаться, но мне не нравится строка:

auto p(std::make_pair(GMProject::OVERWRITE, &detail::OverWriteFn));

Используете ли вы VS 2010?Вы можете навести имя переменной (p) и посмотреть, какой тип auto выведен.

Также вы пробовали:

 tmp.insert(std::make_pair(GMProject::OVERWRITE, &detail::OverWriteFn));

Или

tmp.insert(std::pair(GMProject::OVERWRITE, &detail::OverWriteFn));

* * 1014

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...