我正在研究一个在我自己的类中使用multimaps的项目,我遇到了一个段错误。以下是我的代码中与该问题相关的部分。我真的很感激一些帮助。感谢。
这是database.h
#include <iostream>
#include <map>
using namespace std;
class database{
public:
database(); // start up the database
int update(string,int); // update it
bool is_word(string); //advises if the word is a word
double prox_mean(string); // finds the average prox
private:
multimap<string,int> *data; // must be pointer
protected:
};
这是database.cpp
#include <iostream>
#include <string>
#include <map>
#include <utility>
#include "database.h"
using namespace std;
// start with the constructor
database::database()
{
data = new multimap<string,int>; // allocates new space for the database
}
int database::update(string word,int prox)
{
// add another instance of the word to the database
cout << "test1"<<endl;
data->insert( pair<string,int>(word,prox));
cout << "test2" <<endl;
// need to be able to tell if it is a word
bool isWord = database::is_word(word);
// find the average proximity
double ave = database::prox_mean(word);
// tells the gui to updata
// gui::update(word,ave,isWord); // not finished yet
return 0;
}
这是test.cpp
#include <iostream>
#include <string>
#include <map>
#include "database.h" //this is my file
using namespace std;
int main()
{
// first test the constructor
database * data;
data->update("trail",3);
data->update("mix",2);
data->update("nut",7);
data->update("and",8);
data->update("trail",8);
data->update("and",3);
data->update("candy",8);
// cout<< (int) data->size()<<endl;
return 0;
}
非常感谢。它编译并运行到cout << "test1" << endl;
但下一行是段错误。
生锈
答案 0 :(得分:5)
你从未真正创建过数据库对象,只是一个指向无处的指针(也许你习惯了另一种语言)。
尝试创建一个像这样的database data;
然后将您的->
更改为.
以访问成员。
答案 1 :(得分:1)
您需要在开始在其上插入数据之前分配数据库。
变化:
database *data;
为:
database *data = new database();
或:
database data;
main()
中的。
编辑:如果您使用后者,请在后续方法调用中将->
更改为.
。否则,请在使用后记住delete
data
对象。