簡體   English   中英

初始化2D對象數組

[英]Initialize 2D array of objects

嗨,我在初始化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)|

我只想知道如何解決?

謝謝。

好的,我添加了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;
        }
    }

取代這個

tfreq[i] = new TermFrequency[totalNumberOfDocuments];

有了這個

tfreq[i] = new TermFrequency(yourKey,totalNumberOfDocuments);

或簡單地

 tfreq[i] = //create new TeamFrequencyObject by using class constructor

這條線

TermFrequency tfreq[v_word.size()][totalNumberOfDocuments];

嘗試默認構造TermFrequency對象數組。 換句話說,它將調用數組中所有元素的默認構造函數。

問題是您的TermFrequency類已經有一個用戶定義的構造函數( TermFrequency::TermFrequency(Key, std::string, int, double) ,它會覆蓋編譯器生成的默認構造函數。您需要將其包括在擁有:

class TermFrequency
{
    public:
         TermFrequency() { ... }
    // ...
};

沒有匹配的函數來調用'TermFrequency :: TermFrequency()

看來您的課程沒有默認的構造函數,然后該行

tfreq[i] = new TermFrequency[totalNumberOfDocuments];

無法編譯。

由於您已經超載了構造器TermFrequency(Key,string,int,double); 您沒有默認值了。 當你打這條線

tfreq[i] = new TermFrequency[totalNumberOfDocuments];

您的程序將查找默認構造函數。

為了避免該錯誤,您必須按如下所示重寫您TermFrequency構造函數:

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

動態,則可以執行以下操作:

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

那么您可以for循環2d mc [i] [x] = new myclass(); //如果有多個構造函數,如果有默認的構造函數,則前面的第一個循環就足夠了,而無需在每個元素中調用構造函數,則默認情況下將調用它

我的意思是,如果您有兩個構造函數

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

和另一個構造函數

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

如果您希望所有元素都由第二個構造函數初始化,則需要for循環每個元素,就像我說的:D

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM