Использование шаблонов C ++ с классом динамического связывания - PullRequest
0 голосов
/ 05 января 2012

В прошлом я использовал и шаблоны, и динамическое связывание в C ++, однако недавно я попытался использовать их вместе и обнаружил, что компилировать было невозможно.

Я пытаюсь сделать что-то вроде этого:

     std::map<MyClass, unsigned int> mymap;

Где MyClass - это класс, использующий динамическое связывание памяти. После нескольких часов поиска у меня сложилось впечатление, что это приводит к последствиям, которые я до сих пор не могу разрешить, поэтому я надеялся получить какое-то руководство по этому вопросу и пути его решения.

Моя конечная цель - сделать что-то вроде этого:

std::vector<MyClass> MyClassPool;
//fill the vector with MyClass objects...
for(usigned int i=0 ; i<MyClassPool.size() ; i++)
{
    mymap[ MyClassPool[i] ] = i;
}

Я пытался использовать указатели различными способами, но он не работает, и я не вижу, что можно сделать.

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

/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_function.h: In member function `bool std::less<_Tp>::operator()(const _Tp&, const _Tp&) const [with _Tp = Instance]':

/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_map.h:338:   instantiated from `_Tp& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const _Key&) [with _Key = Instance, _Tp = float, _Compare = std::less<Instance>, _Alloc = std::allocator<std::pair<const Instance, float> >]'

/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_function.h:227: error: no match for 'operator<' in '__x < __y'

Ответы [ 3 ]

2 голосов
/ 05 января 2012

Эта ошибка компиляции означает, что operator < не определено для Instance.map должен иметь возможность сортировать ключи и нуждается в этой функции.Если вы не хотите определять operator <, вам нужно предоставить функцию сравнения в качестве третьего параметра шаблона для map, то есть std::map<Instance, float, compare_instances>.

... Если подумать, вы 'Вы уверены, что хотите Instance в качестве ключа и float в качестве данных, а не наоборот?Т.е. вы ищете на карте Instance, чтобы получить float взамен?

1 голос
/ 05 января 2012

Вы не предоставляете operator< для MyClass.Требуется std::map.У вас есть два варианта: предоставить компаратор в качестве третьего аргумента шаблона для map ИЛИ реализовать оператор в MyClass.

0 голосов
/ 05 января 2012

Это не имеет ничего общего с «динамическим связыванием» (что в любом случае здесь не подразумевается).Ваш класс должен иметь порядок, который будет помещен в карту.Требуется оператор <. </p>

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