Il y a des choses à clarifier: Quand tu écris : objet-> variable %%"Variable" correspond à une valeur entrée par l'utilisateur. En aucun cas l'utilisateur ne peut agir sur une expression objet->nomDunMembreDuTypeA, (les noms objet et nomDunMembreDuTypeA sont des données du code qui n'existent plus après compilation) il pourra par contre fournir une valeur qui sera stockée dans objet->nomDunMembreDuTypeA.
Quand tu écris : z=variable + x ; %% Exemple simplifié mais variable appartient à la classe A et x a la classe C en gros. Une variable n'appartient pas à une classe, elle appartient à un objet a qui serait du type class A. Pour x, on peut l'utiliser car ici la valeur sous entendue est x le champ de l'objet courant du type courant. On peut écrire :
void C::fctMembre() {
z = adrDUnObjetDeTypeA->nomDunMembreDuTypeA + this->x;
}
adrDUnObjetDeTypeA doit avoir préalablement mis à jour à partir un d'un objet de type A qui existe quelque part. this-> est facultatif, on ne l'écris jamais, il rappelle que l'on utilise un membre de l'objet courant (si on appelé totor.fctMembre(), on accède ici au x de totor.)
Merci pour ta reponse, je comprends déjà quelques mauvaises expressions de ma part
Je reexplique clairement mon problème:
J'ai une solution contenant différents projets :
Un projet me concerne appelons le "projet" :
Ce projet contient différents fichiers .h et .cpp ainsi qu'un fichier .ui , le fichier .ui contient une fenêtre ou l'utilisateur peut choisir la valeur de certains attributs, ici l'attribut "pente" nous concerne.
void qPrincipal::doAction()
{
.......
dialog = new ccPrincipal(....);
int pentee = 3;
dialog->pente->setValue(pentee);
dialog->show();
connect(dialog->pente, SIGNAL(valueChanged(int)), this, SLOT(itemChanged()));
Ce qui m'initialise la valeur de pente à 3 et l'utilisateur peut la modifier ce qui la modifie automatiquement dans "pente" ensuite je récupere cette attribut comme cela:
class ccPrincipal : public QDialog, public Ui_surfacee
{
public:
explicit ccPrincipal(QWidget* parent = 0);
int getPente();
};
#endif
Jusque la tout fonctionne
Maintenant j'aimerai utiliser mon attribut "pente" dans un autre fichier avec d'autres classes, voir fichier suivant
calcul.cpp
bool Calcul::calculmoyen(const DgmOctree::octreeCell& cell,
void** additionalParameters,
NormalizedProgress* nProgress/*=0*/)
{
....
if (counter != 0)
{
gN = static_cast<ScalarType>(atan(sum.norm() / counter) * 180 / 3.14);
if (gN < pente)
{
gN = 0;
}
}
}
}
...
}
J'aimerai comparer gN à pente, j'ai essayé de simplifier au mieux le code et mettre les parties qui nous interessent, je suis un debutant, si jamais j'ai oublié certaines choses importante à mentionner vous pouvez me le signaler
Tu souhaites accéder à la fonction getPente() pour un objet qui serait de la classe ccPrincipalà partir d'une méthode membre de la classe Calcul. J'avais indiqué qu'un membre n'a de sens que pour un objet donné, ici l'objet serait le dialogde type ccPrincipal, qui est un membre d'un objet de type qPrincipal, c'est une notion qu'il est primordial de comprendre.
A. Il faut ici trouver un pointeur sur l'objet de type ccPrincipalet s'en servir en écrivant alors if ( gn < ptrSurObjetPrincipal->getPente() ).
B. Le fichier calcul.cpp doit connaître le type qui contient la valeur à récupérer, ça serait un #include ccPrincipal.h, (ou peut-être plutôt un #include qPrincipal.h on verra plus loin) au début.
C. Reste à trouver cet objet qui serait peut-être du type ccPrincipal , je suppose vu le nom qu'il n'y en a qu'un. C'est l'adresse de cette variable dialog qui va devoir être transmise aux objets de type Calcul. Pour cela on pourrait supposer que le constructeur de Calculreçoive cette adresse et la mémorise dans un de ses champs qui serait défini ainsi :
class ccPrincipal* ptrSurObjetPrincipal;
D. Mais ton ccPrincipaldécrit un type de dialogue. dialogue qui serait peut-être terminé au moment où l'objet de type Calculest utilisé, il est trop tard le membre que tu convoites n'existe plus! Il faut donc tout repenser si on est dans ce cas!
E. Il faut mettre la donnée penteau bon endroit. C'est au dialogue de transmettre au moment de sa fermeture les données qu'il a permis de mettre à jour. De manière symétrique un objet de type qPrincipal à transmis la pentepar l'utilisation de dialog->pente->setValue(pentee); l'objet dialogue connaît son père, il peut lui transmettre la pente. Tu peux aussi utiliser la méthode itemchanged() qui s'est enregistrée pour savoir que la valeur de pentea changée. Dans cette fonction il suffit de demander la pente et de la mémoriser.
membre_pente = dialog->getPente(); // qPrincipal récupère dans un de ses membres la valeur de la pente.
F. Cette fois la penteserait alors dans un objet de type qPrincipalqui lui existerait encore au moment de l'utilisation de Calcul. Il reste toujours à l'objet de type Calculde retrouver l'objet de type qPrincipalpour pouvoir lui demander cette pente. (on reprend les commentaire A. B. et C. en considérant cette fois que l'on accède à un objet du type qPrincipal au lieu du type ccPrincipal.)
Je n'ai certainement pas été assez clair, n'hésite pas à demander des précisions.
En recherche d'emploi.
Utilisation d'un objet dans 2 fichiers différents
× 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.
En recherche d'emploi.
En recherche d'emploi.