"must point to class/struct/union"

Signaler
Messages postés
6
Date d'inscription
mardi 19 mai 2009
Statut
Membre
Dernière intervention
20 mai 2009
-
Messages postés
6
Date d'inscription
mardi 19 mai 2009
Statut
Membre
Dernière intervention
20 mai 2009
-
Bonjour à tous,
Je suis en train de travailler sur un programme en C++ et j'obtiens régulièrement ce message "...must point to class/struct/union" quand je compile. En fait le problème vient du fait que dans ma fonction main(), j'utilise régulièrement des variables définis dans d'autres classes en utilisant les pointeurs (exemple: DataC->time ) et cela marche très bien. Or j'ai dû créer une fonction dans main() qui fait appel aux mêmes variables mais cette fois ci j'obtiens des problèmes lors de la compilation. Je trouve étonnant que main() réussi à utiliser ces variables d'autres classes alors qu'une fonction écrite dans main() n'arrive pas à la faire !
Merci pour toute aide
Amicalement

10 réponses

Messages postés
3829
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
8 janvier 2021
114
Peux-tu copier-coller les morceaux de code qui semblent poser problème ?
Messages postés
6
Date d'inscription
mardi 19 mai 2009
Statut
Membre
Dernière intervention
20 mai 2009

C'est juste que le programme est assez long. Est-ce que ma question est si incompréhensible ?
Messages postés
3829
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
8 janvier 2021
114
Non, elle est tout à fait compréhensible. Mais sans "voir" ce qui cloche, c'est super dur de te répondre précisément.
Peux-tu au moins reproduire ce problème en épurant/simplifiant un maximum un morceau de ton code ?
Messages postés
6
Date d'inscription
mardi 19 mai 2009
Statut
Membre
Dernière intervention
20 mai 2009

ok j'ai qqch de ce genre (en très simplifié j'espère pas trop....) :

...
#include "AllData.h"
...

int main() {   
...
AllData * DataC = new AllData(spacing_c, cnn,m);
...
DataC->update_temperature_dependece_Data(Tstart,0);
...
C0 = DataC->C_alpha_star;
...
fi=    fzenner(vitesse_test, T, mu0, cnn)
...
 return 0;
    }

double fzenner (double vitesse2, double T, double mu0, double cnn)
       
    {       
        DataC->update_temperature_dependece_Data(T,0); 
        ...
        alpha_eq = DataC->C_alpha_star ;
        gamma_eq = DataC->C_gamma_star ;
...
        return F;
     }
   
    J'ai typiquement ce genre de problème lors de la compil situé dans la fonction fzenner seulement :
error C2065: 'DataC' : undeclared identifier
error C2227: left of '->update_temperature_dependece_Data' must point to class/struct/union
   
Messages postés
3829
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
8 janvier 2021
114
> error C2065: 'DataC' : undeclared identifier
Heu c'est normal !

Si tu déclares une variable locale, elle n'est visible que dans la fonction ou elle est déclarée. Donc dans fzenner, celle-ci n'existe pas. Il faut la passer en argument de la fonction, pour pouvoir s'en servir.
Renseigne toi sur ce qu'on appelle "la portée des variables" et les "scopes".
Messages postés
6
Date d'inscription
mardi 19 mai 2009
Statut
Membre
Dernière intervention
20 mai 2009

Salut merci pour la réponse. En fait DataC n'est pas une variable mais un pointeur qui (selon moi) pointe sur une fonction écrite dans la classe AllData et pas dans main(). En fait j'ai déjà utilisé cette ligne dans main () : C0 = DataC->C_alpha_star et j'obtiens bien la valeur numérique de "C_alpha_star" calculé dans la fonction update_temperature_dependece_Data(Tstart,0) de la classe AllData.
Messages postés
3829
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
8 janvier 2021
114
A noter qu'un pointeur est une variable contenant un entier (une adresse).

De plus fzenner n'est pas une méthode, mais une fonction, donc tu ne peux pas accéder aux attributs de la classe AllData.

DataC est donc bien indéfini !
Messages postés
6
Date d'inscription
mardi 19 mai 2009
Statut
Membre
Dernière intervention
20 mai 2009

ahh ok et il y a pas un moyen de pouvoir accéder aux attributs de la classe Alldata dans la fonction fzenner sans passer par les mettre en argument lors de l'appel de la fonction dans main() ?
Messages postés
3829
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
8 janvier 2021
114
Non, a moins que fzenner ne fasse partit de AllData.

void AllData::fzenner(...

et dans ton main:

fi=  DataC->fzenner(vitesse_test, T, mu0, cnn)
Messages postés
6
Date d'inscription
mardi 19 mai 2009
Statut
Membre
Dernière intervention
20 mai 2009

mmm ok je vais y réfléchir merci beaucoup