Partage
  • Partager sur Facebook
  • Partager sur Twitter

problème de compilation - erreur d'initialisation

    21 mai 2019 à 17:22:32

    int main(int argc, char* argv[]){
    TApplication app("app",&argc,argv);
    
    TFile *f = new TFile("ggdATLAS_Appendix_06.root");
    TTree *t2 = (TTree*)f->Get("t2");
    t2->Print();
    
    cout<<"probleme1"<<endl;
    
    int iprov,ntrack;
    double e[3],px[3],py[3],pz[3];
    double x3;
    double pt[3],y[3];
    double x1,x2;
    float pdf_weight[1000];
    float weight;
      // we get the value stored into the header for the normalisation
    TList *list = t2->GetUserInfo();
    cout<<"probleme2"<<endl;
    list->Print();
    
    
    TVectorT<float> &v = *(list->At(0));
    cout<<"probleme3"<<endl;
    
    float& nb_evt = v[0];
    cout<<"probleme3"<<endl;
    
    float& xsec = v[1];
    cout<<"probleme3"<<endl;
    
    float& sqrt_s = v[2];
    cout<<"PROBLEME"<<endl;
    
    float norma = xsec/nb_evt;
    cout<<"probleme3"<<endl;

    Voici la première partie de mon code , la où ca beug visiblement. Quand je compile, j'obtiens l'erreur:


    error: invalid initialization of reference of type ‘TVectorT<float>&’ from expression of type ‘TObject’ 
    TVectorT<float> &v = *(list->At(0));


    J'ai essayé de modifier cette ligne plusieurs fois, mais je n'arrive pas à trouver la syntaxe qui convient . Or j'ai besoin de ce vecteur v dans la suite de mon programme. 
    Quelqu'un peut-il m'aider ?


    Cordialement 

    • Partager sur Facebook
    • Partager sur Twitter
      21 mai 2019 à 19:22:18

      Il sent bien le renfermé ce code tout moisi avec des pointeurs nues et autres tableau à la C.

      Moi aussi, je suis comme le compilateur, je comprends pas ce que vous tentez de faire car à gauche du égale vous avez une référence sur un TVectorT<float> et le bidule à droite, bin c'est un TObject.

      Vous avez un opérateur d'affectation dans TVectorT<float> qui prend en entré un TObject ? Ça serait suspect.

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        23 mai 2019 à 13:37:50

        Je n'ai pas écrit ce code, c'est pour ça que c'est difficile pour moi de l'utiliser.

        D'après la doc de root le TVectorT<> est un TObject.

        https://root.cern.ch/root/html528/TVectorT_double_.html

        Je ne sais pas ce qu'est un opérateur d'affectation...

        • Partager sur Facebook
        • Partager sur Twitter
          23 mai 2019 à 14:20:16

          Attention à l'héritage et les templates, TVectorT<float> et TVectorT<double> ne partagent pas forcément les mêmes classes mère.

          Ici c'est un TVectorT<float>, pas un TVectorT<double>.

          "TVectorT<float>" dérive de "TObject", ok, mais cela veut dire qu'un peu utiliser un "TVectorT<float>" à tous les endroits où on peut utiliser un "TObject", pas l'inverse.

          Vous ne pouvez pas faire passer un "TObject" pour un "TVectorT<float>" et c'est ce que vous reproche le compilateur.

          Si ce n'est pas un problème d'algorithmie, l'usage de pointeurs nus, et de cast à la C bien cracra, à fait perdre le typage correct de vos variables.

          Renforcez le typage de vos classes pour ne pas avoir à faire tous ces casts et ces pointeurs nus.

          • Partager sur Facebook
          • Partager sur Twitter
          Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
            23 mai 2019 à 14:32:19

            C'est ça https://root.cern.ch/root/html528/TVectorT_double_.html#TVectorT_double_:operator_

            Ton compilateur te donne surement plus d'infos.

            • Partager sur Facebook
            • Partager sur Twitter
              23 mai 2019 à 15:24:39

              Je ne trouve pas de solutions, mais peut-être avez vous une autre idée. Au final, la seule chose dont j'ai besoin, c'est de récupérer les données de ma liste, ce sont 3 nombres, dont j'ai besoin d'utiliser comme variables au format double par la suite dans mon programme. Comment puis-je faire ça?
              • Partager sur Facebook
              • Partager sur Twitter
                27 mai 2019 à 9:29:21

                Restez le plus correctement typé possible.

                Changez la signature de la méthode "GetUserInfo" si nécessaire, et ne passez pas par une variable de type "TList*" tout moisi.

                • Partager sur Facebook
                • Partager sur Twitter
                Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                  30 mai 2019 à 18:04:06

                  vous me parlez chinois !

                  un exemple précis à me soumettre ?

                  • Partager sur Facebook
                  • Partager sur Twitter
                    30 mai 2019 à 19:12:28

                    Ya pas grand chose de chinois dans le dernier message ^^ :

                    1) La signature d'une fonction, c'est le type qu'elle renvoie, son nom, et ses paramètres. Par exemple :

                    int foo(int number){
                       return number + 2;
                    }

                    La signature ici est : "int foo(int number)"

                    Donc bacelar te conseil simplement de modifier la signature de la fonction GetUserInfo, pour eviter le 2).

                    2) Ne pas utiliser de variable de type TList* car c'est un pointeur nu

                    -
                    Edité par K4kugen 30 mai 2019 à 19:21:37

                    • Partager sur Facebook
                    • Partager sur Twitter
                      3 juin 2019 à 11:34:17

                      Donnez les signatures des fonctions que votre code utilise.

                      On pourra savoir si c'est votre code client qui paume le typage ou si c'est les fonctions que vous utilisez qui sont typées avec les pieds.

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.

                      problème de compilation - erreur d'initialisation

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown