Карта C ++ не может быть вставлена ​​с парой - PullRequest
1 голос
/ 03 августа 2009

Почему я не могу вставить, как показано ниже?

#include <map>

struct something {

} some_object;

typedef std::map<std::string, something*> list;
typedef std::pair<std::string, something*> pair;

int main()
{
    list l;
    pair p("abc", &some_object); // working fine!!!
    l.insert(p); // 17 errors

    return 0;
}

Visual studio выдает мне много ошибок, и я ничего из них не понимаю. Первый из них:

error C2784: 'bool std::operator <(const std::_Tree<_Traits> &,const std::_Tree<_Traits> &)' : could not deduce template argument for 'const std::_Tree<_Traits> &' from 'const std::string'

Я могу опубликовать больше, но я не хочу спамить здесь. Большое спасибо за вашу помощь.

Ответы [ 2 ]

3 голосов
/ 03 августа 2009

Вам нужно

#include <string>
1 голос
/ 03 августа 2009

Я бы изменил эту строку:

typedef std::pair<std::string, something*> pair;

Вы передаете подробности реализации. Вы уверены, что это всегда будет верно для всех будущих версий библиотеки? Плотное связывание вашего кода - плохая идея.

Попробуйте это:

typedef list::value_type pair;

PS. 'list' не будет моим первым выбором для имени типа, который я помещаю в глобальное пространство имен. Либо поместите его в собственное пространство имен, либо назовите его «MyList».

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