Inclusion circulaire & quelques questions - C++ - Programmation
Marsh Posté le 11-01-2013 à 14:46:54
1/ Tu dois utliser ce que l'on appelle forward declaration
Ex. copié de http://stackoverflow.com/questions [...] lationship
Code :
|
2/ Tu peux donner un cas le plus court possible qui ne marche pas?
Marsh Posté le 11-01-2013 à 14:54:11
Merci beaucoup de vos réponses !
J'ai rajouté un 3e point
Exemple pour la variable statique dans le header:
Device.hpp
Code :
|
Note : j'ai pas testé à l'instant, mais je me souviens très bien que ce code ne compilait pas
Marsh Posté le 11-01-2013 à 15:06:46
crom29 a écrit : Merci beaucoup de vos réponses !
|
T'as oublié un ; à la fin de la décalration de la classe. Sinon ça compile.
Marsh Posté le 11-01-2013 à 15:24:09
chez moi ça compile pas
Voici mon fichier:
main.cpp
Code :
|
(si tu n'instancie pas la classe, ça compile)
Marsh Posté le 11-01-2013 à 15:38:09
En effet. Je suis pas assez colé en C++ pour te répondre. Par contre, c'est pas comme ça qu'on fait un singleton, si tu essaies de faire ça.
Marsh Posté le 11-01-2013 à 16:00:25
Disons que c'est un singleton vite fait sans sécurités contre la double instanciation et sans auto-instanciation
Marsh Posté le 11-01-2013 à 16:08:10
Soyons précis, cela compile, mais cela ne linke pas
Dans l'exemple que vous donnez, vous déclarez une variable globale (car un attribut de classe revient à ça), mais vous ne la définissez pas.
Il suffit, dans votre cas, de rajouter après la déclaration de la classe Device la ligne
Code :
|
ou, si vous désirez l'intialiser
Code :
|
Si vous aviez un Device.cpp, cela aurait été le bon endroit pour mettre cette déclaration, sinon, il faut la placer à un endroit unique (donc pas dans le fichier Device.h (ou alors en assurant l'unicité de la déclaration via des primitives de précompilation, mais cela n'est pas forcément utile de compliquer l'affaire ...)
Comme indiqué plus haut, faites comme si vous aviez une variable globale que vous déclareriez en extern dans un fichier .h, c'est exactement la même chose (à la visibilité près, du au fait que l'attribut de classe est privé, bien sûr ! )
Pour le 3e point, je dirais que non, pas à ma connaissance, le mieux serait de passer par des classes templates.
Bonne continuation !
Marsh Posté le 11-01-2013 à 16:11:11
Merci beaucoup Farian
Autant pour moi, mes yeux ont décidés de ne pas voir "error: ld returned 1" ^^
Tous vos conseils vont me permettre de simplifier pas mal mon code ! Encore Merci
Marsh Posté le 11-01-2013 à 14:25:03
Bonjour cher amis codeurs !
Je rencontre quelques soucis depuis un certain temps, et je me suis dit que ça serais bien de les résoudre...
1/
Idée : Un objet Device est contrôlé par plusieurs "modules", dont le NetworkController.
Device doit pouvoir accèder au NetworkController pour l'initialiser, le stopper, ... (ici, j'ai juste écrit l'initialisation)
NetworkController doit pouvoir accèder au Device pour lui dire de faire tel ou tel truc (ici juste la fonction Bip() )
le problème vient de l'inclusion : je ne sais pas comment la tourner pour que l'une ne gène pas l'autre.
Voici le petit programme minimal qui ne compile pas :
main.cpp
Device.cpp
NetworkCtrl.hpp
Voir "dépendance circulaire"
http://stackoverflow.com/questions [...] lationship
Merci gelatine_velue & dwogsi
2/
Cette fois c'est plus simple
Comment définir une variable statique dans un header, et l'utiliser dans le même fichier ?
En gros je suis un peu fainéant, et je ne veut pas utiliser de .cpp et tout mettre dans le .h
Exemple:
Device.hpp
3/
Est il possible de stocker le type d'une variable dans une autre?
Par exemple j'ai un objet Sac, qui contient une variable "vector<Objet*> m_obj"
Dans la classe Objet, il y aurait une variable "xxxx m_type" qui serait initialisée dans les classes filles, avec le type de la classe fille.
Cela me permettrais ensuite de faire : dynamic_cast<m_obj[0].m_type> m_obj[0]
Pour l'instant je me contente d'un "int m_type", et de switch/case pour caster correctement les objets, mais c'est pas très pratique niveau évolutivité...
Merci d'avance pour votre aide !
Message édité par crom29 le 11-01-2013 à 14:58:46
---------------
Mods: HAF922 | Shinobi XL White GitHub Admin de La Colère d'Aurile, serveur RP-Action Neverwinter Nights 2