2

嗨,我在初始化 2D 对象数组时遇到问题。该类是 TermFrequency(Key,string,int,double); 这就是我初始化对象的动态二维数组的方式:

// 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 Constructor 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

Replace this

tfreq[i] = new TermFrequency[totalNumberOfDocuments];

with this

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

or simply

 tfreq[i] = //create new TeamFrequencyObject by using class constructor
于 2013-06-28T13:11:43.697 回答
1

This line

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

attempts to default-construct an array of TermFrequency objects. In other words, it will call the default-constructor of all the elements in the array.

The problem is that your TermFrequency class already has a user-defined constructor (TermFrequency::TermFrequency(Key, std::string, int, double) that overrides the compiler-generated default-constructor. You'll need to include it on your own:

class TermFrequency
{
    public:
         TermFrequency() { ... }
    // ...
};
于 2013-06-28T13:11:54.437 回答
1

no matching function for call to 'TermFrequency::TermFrequency()

It looks like your class doesn't have a default constructor and then the line

tfreq[i] = new TermFrequency[totalNumberOfDocuments];

fails to compile.

于 2013-06-28T13:11:59.527 回答
1

由于您已经超载了您的构造函数,因此TermFrequency(Key,string,int,double);您不再有默认构造函数。当你打电话给这条线

tfreq[i] = new TermFrequency[totalNumberOfDocuments];

你的程序寻找一个默认的构造函数。

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

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

于 2013-06-28T13:15:07.983 回答
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

于 2014-12-26T08:16:29.930 回答