初始化2D对象数组

时间:2013-06-28 13:08:11

标签: c++ arrays dynamic

嗨,我对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;
        }
    }

5 个答案:

答案 0 :(得分:1)

替换此

tfreq[i] = new TermFrequency[totalNumberOfDocuments];

用这个

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

或只是

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

答案 1 :(得分:1)

这一行

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

尝试默认构造TermFrequency个对象的数组。换句话说,它将调用数组中所有元素的默认构造函数。

问题是你的TermFrequency类已经有一个用户定义的构造函数(TermFrequency::TermFrequency(Key, std::string, int, double),它覆盖了编译器生成的默认构造函数。你需要自己包含它:

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

答案 2 :(得分:1)

  
    

没有用于调用'TermFrequency :: TermFrequency()

的匹配函数   

看起来您的类没有默认构造函数,然后是行

tfreq[i] = new TermFrequency[totalNumberOfDocuments];

无法编译。

答案 3 :(得分:1)

由于您已经重载了结构TermFrequency(Key,string,int,double);,因此您不再使用默认结构。当你拨打这一行时

tfreq[i] = new TermFrequency[totalNumberOfDocuments];

您的程序会查找默认构造函数。

为了避免错误,您必须重写重叠的TermFrequency构造函数,如下所示:

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

答案 4 :(得分:1)

动态然后您可以执行以下操作:

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

然后你可以循环2d mc [i] [x] = new myclass(); //如果你有几个构造函数,如果你有默认的构造函数,那么上一个第一个循环就足够了而不调用每个元素中的构造函数,默认情况下会调用它

我的意思是,如果你有两个构造函数

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

和另一个构造函数

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

如果你想要所有元素由第二个构造函数初始化,那么你需要循环每个元素,就像我说的那样:D