[英]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];
我知道為什么我得到錯誤:
我只想知道如何解決?
謝謝。
好的,我添加了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.