[英]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.