2 votes

Initialiser un tableau d'objets 2D

Bonjour, j'ai un problème avec l'initialisation d'un tableau d'objets en 2D. La classe est TermFrequency(Key,string,int,double); C'est ainsi que j'initialise le tableau dynamique d'objets en 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];

J'ai compris pourquoi je reçois l'erreur :

  • pas de fonction correspondante pour l'appel à 'TermFrequency::TermFrequency()'*.
  • note : TermFrequency::TermFrequency(Key, std::string, int, double)|

Je veux juste savoir comment je peux le réparer ?

Merci.

Ok, j'ai ajouté le DEFAUT Constructeur TermFrequency et cela a fonctionné : TermFrequency(); Maintenant, par exemple, je peux ajouter de nouveaux objets comme, d'accord ?

Cette mise en œuvre est-elle considérée comme correcte ?

 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);
    }
    }

Et ça, c'est pour la sortie :

  for( size_t i = 0 ; i < v_word.size() ; i++ )
    {
        for(int j = 0; j < totalNumberOfDocuments;j++)
        {
             cout << tfreq[i][j].getTermFrequency() << endl;
        }
    }

1voto

Nikola Mitev Points 2322

Remplacez ceci

tfreq[i] = new TermFrequency[totalNumberOfDocuments];

avec ceci

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

ou simplement

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

1voto

0x499602D2 Points 36421

Cette ligne

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

tente de construire par défaut un tableau de TermFrequency objets. En d'autres termes, il appellera le constructeur par défaut de tous les éléments du tableau.

Le problème est que votre TermFrequency possède déjà un constructeur défini par l'utilisateur ( TermFrequency::TermFrequency(Key, std::string, int, double) qui remplace le constructeur par défaut généré par le compilateur. Vous devrez l'inclure vous-même :

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

1voto

Cassio Neri Points 6095

pas de fonction correspondante pour l'appel à 'TermFrequency::TermFrequency()

Il semble que votre classe n'ait pas de constructeur par défaut et que la ligne

tfreq[i] = new TermFrequency[totalNumberOfDocuments];

ne parvient pas à compiler.

1voto

Puisque vous avez surchargé votre conctructeur TermFrequency(Key,string,int,double); vous n'en avez plus par défaut. Et lorsque vous appelez cette ligne

tfreq[i] = new TermFrequency[totalNumberOfDocuments];

votre programme recherche un constructeur par défaut.

Afin d'éviter l'erreur, vous devez réécrire votre code superposé. TermFrequency comme suit :

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

1voto

Alsh compiler Points 810

Ou Dynamique alors vous pouvez faire ce qui suit :

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

ensuite vous pouvez forcer la boucle 2d mc[i][x] = new myclass ( ) ; // si vous avez plusieurs constructeurs, si vous avez celui par défaut alors la première boucle précédente est suffisante sans appeler le constructeur dans chaque élément, il sera appelé par défaut.

Ce que je voulais dire c'est que si vous avez deux constructeurs

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

et un autre constructeur

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

si vous voulez que tous les éléments soient initialisés par le deuxième constructeur, alors vous devez boucler chaque élément comme je l'ai dit :D

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X