создание класса базы данных с использованием класса multimap в c

#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()’ работает корректно, хотя заключительные скобки не нужны.