#c #stl #class-design #multimap
#c #stl #класс-проектирование #multimap
Вопрос:
Я работаю с C для проекта. Мне нужно сохранить пару (строка, целое число) и получить к ним доступ на основе строки. Класс multimap кажется идеальным для этого. Я пытаюсь создать свой собственный класс database, который будет включать методы для нахождения среднего значения и подсчета всех целых чисел, связанных с конкретной строкой. Однако я немного запутался в начальном конструкторе. Моя база данных должна быть создана при вызове database data();
, но она выдает огромную ошибку.
Вот реализация конструктора в database.cpp
database::database()
{
data = new multimap<string,int>; // allocates new space for the database
*data["asdf"]= 0; // adds a point. not needed...?
}
Кроме того, файл database.h выглядит следующим образом.
private:
multimap<string,double> *data;
Ошибка довольно плотная, и я не могу ее расшифровать, но когда я запускаю g database.cpp test.cpp вот что получается.
$ g database.cpp test.cpp
database.cpp: In constructor ‘database::database()’:
database.cpp:11: error: cannot convert ‘std::multimap<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> > >*’ to ‘std::multimap<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, double, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, double> > >*’ in assignment
database.cpp:12: error: invalid types ‘std::multimap<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, double, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, double> > >*[const char [5]]’ for array subscript
Редактировать:
Я забыл добавить, спасибо за помощь!
Ржавый
Ответ №1:
Вы объявляете data
как multimap<string,double>*
, но затем пытаетесь присвоить data
a multimap<string,int>*
— согласовать их.
Кстати, database data();
это не то, что вы хотите — фактически это объявление нулевой функции с именем data
с типом возвращаемого значения database
; используйте database data;
вместо этого.
Комментарии:
1. Хорошая уловка в ‘database data();’. Следует отметить, что ‘database * data = new database()’ работает корректно, хотя заключительные скобки не нужны.