0

自分のクラス内でマルチマップを使用するプロジェクトに取り組んでいますが、segfault に遭遇しました。この問題に関連するコードの一部を次に示します。助けていただければ幸いです。ありがとう。

ここに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;が、次の行で segfaults が発生します。

さびた

4

2 に答える 2

5

実際にデータベース オブジェクトを作成したことはなく、どこにもポインタを置いていないだけです (おそらく、別の言語に慣れているでしょう)。

このようなものを作成してみてくださいdatabase data;

次に、に変更->.て、メンバーにアクセスします。

The Definitive C++ Book Guide and Listにある本のいずれかを入手することも検討してください。

于 2011-04-12T17:17:24.010 に答える
1

データベースにデータを挿入する前に、データベースを割り当てる必要があります。

変化する:

database *data;

に:

database *data = new database();

また:

database data;

main()

編集:後者を使用する場合は、後続のメソッド呼び出しでに変更->してください。それ以外の場合は、使用後にオブジェクトを.覚えておいてdeleteください。data

于 2011-04-12T17:21:04.397 に答える