2

こんにちは、オブジェクトの 2D 配列の初期化に問題があります。クラスは TermFrequency(Key,string,int,double); 、オブジェクトの動的 2D 配列を初期化する方法です。

// TermFrequency tfreq [v_word.size()][totalNumberOfDocuments];
   TermFrequency** tfreq = new TermFrequency*[v_word.size()];
   for(size_t i = 0; i < v_word.size(); ++i)
       tfreq[i] = new TermFrequency[totalNumberOfDocuments];

エラーが発生する理由を理解しました:

  • 'TermFrequency::TermFrequency()' の呼び出しに一致する関数がありません |
  • 注: TermFrequency::TermFrequency(Key, std::string, int, double)|

どうすれば修正できるか知りたいだけですか?

ありがとうございました。

OK、DEFAULT コンストラクター TermFrequency を追加したところ、うまくいきましたTermFrequency(); 。たとえば、次のような新しいオブジェクトを追加できますよね?

その実装は正しいと考えられていますか?

 For(int i = 0; i < Length1; i++){
    for(int j = 0; j < length2;j++){
       tfreq[i][j] = TermFrequency(v_word[i],documents[j],j,wordCount);
    }
    }

そして、それは出力用です:

  for( size_t i = 0 ; i < v_word.size() ; i++ )
    {
        for(int j = 0; j < totalNumberOfDocuments;j++)
        {
             cout << tfreq[i][j].getTermFrequency() << endl;
        }
    }
4

5 に答える 5

1

またはダイナミックの場合、次のことができます。

myclass **mc =  new myclass*[5];
 for (int i = 0; i < 5; ++i) 
  mc[i] = new myclass[6];

次に、2 次元 mc[i][x] = new myclass ( ); を for ループできます。// 複数のコンストラクターがある場合、デフォルトのコンストラクターがある場合は、各要素でコンストラクターを呼び出さずに前の最初のループで十分です。デフォルトで呼び出されます。

つまり、2 つのコンストラクターがある場合

myclass (){
 this->variable = 0 //... etc
}

そして別のコンストラクタ

myclass (int var){
 this->variable = var;
}

すべての要素を2番目のコンストラクターで初期化する場合は、各要素をforループする必要があります:D

于 2014-12-26T08:16:29.930 に答える
1

コンストラクターをオーバーロードTermFrequency(Key,string,int,double);したため、デフォルトのコンストラクターはもうありません。そして、あなたがこの行を呼び出すとき

tfreq[i] = new TermFrequency[totalNumberOfDocuments];

プログラムはデフォルトのコンストラクターを探します。

TermFrequencyエラーを回避するには、オーバーロードされたコンストラクターを次のように書き直す必要があります。

TermFrequency(Key = Key(),string = " ",int = 0,double = 0);

于 2013-06-28T13:15:07.983 に答える