"must point to class/struct/union"

ouedge Messages postés 6 Date d'inscription mardi 19 mai 2009 Statut Membre Dernière intervention 20 mai 2009 - 19 mai 2009 à 16:37
ouedge Messages postés 6 Date d'inscription mardi 19 mai 2009 Statut Membre Dernière intervention 20 mai 2009 - 20 mai 2009 à 12:33
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

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
19 mai 2009 à 17:16
Peux-tu copier-coller les morceaux de code qui semblent poser problème ?
0
ouedge Messages postés 6 Date d'inscription mardi 19 mai 2009 Statut Membre Dernière intervention 20 mai 2009
19 mai 2009 à 17:33
C'est juste que le programme est assez long. Est-ce que ma question est si incompréhensible ?
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
19 mai 2009 à 17:35
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 ?
0
ouedge Messages postés 6 Date d'inscription mardi 19 mai 2009 Statut Membre Dernière intervention 20 mai 2009
20 mai 2009 à 11:59
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
   
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
20 mai 2009 à 12:04
> 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".
0
ouedge Messages postés 6 Date d'inscription mardi 19 mai 2009 Statut Membre Dernière intervention 20 mai 2009
20 mai 2009 à 12:12
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.
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
20 mai 2009 à 12:19
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 !
0
ouedge Messages postés 6 Date d'inscription mardi 19 mai 2009 Statut Membre Dernière intervention 20 mai 2009
20 mai 2009 à 12:23
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() ?
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
20 mai 2009 à 12:27
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)
0
ouedge Messages postés 6 Date d'inscription mardi 19 mai 2009 Statut Membre Dernière intervention 20 mai 2009
20 mai 2009 à 12:33
mmm ok je vais y réfléchir merci beaucoup
0
Rejoignez-nous