debutant VB
Messages postés93Date d'inscriptionlundi 3 juillet 2006StatutMembreDernière intervention25 juin 2010
-
25 juin 2010 à 18:15
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023
-
25 juin 2010 à 21:40
Bonjour tout le monde,
Pour des raisons d'optimisation de rapidité, j'aimerais rendre quelques petites fonctions d'une de mes classes en inline, mais ça ne marche pas : voici un code simplifié qui illustre mon problème :
Erreur : "release/main.o:main.cpp::-1: error: undefined reference to `MaClasse::dire_bonjour() const'"
En retirant le "inline" de ce programme, la compilation (et l'exécution) fonctionnent à nouveau sans problème ...
J'ai aussi remarqué qu'en mettant tout dans un seul fichier, cela re-marchait, même avec le inline : le code ci-dessous ne pose pas de problème.
----- main.cpp -----
#include <stdio.h>
#include <conio.h>
class MaClasse {
public:
inline void dire_bonjour(void) const;
};
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 25 juin 2010 à 18:30
Il faut que tu utilises les hxx !
Le code "inliné" tout comme les templates, ne peut se trouver dans un fichier source. Or par définition on ne met pas de code dans un header. La solution est donc celle-ci:
Avoir un fichier source (.cc, .cpp)
Avoir un fichier header (.hh, .hpp)
Avoir un fichier de code header (.hxx)
Je te donne un exemple:
Test.hh
#ifndef TEST_HH_
# define TEST_HH_
class Test
{
// ...
void pouet();
void truc();
};
# include "Test.hxx"
#endif /* !TEST_HH_ */
debutant VB
Messages postés93Date d'inscriptionlundi 3 juillet 2006StatutMembreDernière intervention25 juin 2010 25 juin 2010 à 21:15
Ah d'accord, merci beaucoup, je n'avais pas pensé à mettre mon code dans un header. Mais sinon ça marche quand même si je mets tout directement dans mon test.h (sans utiliser de .hxx) même si c'est peut-être pas beau à voir ? :D
C'est comme ça qu'il font dans les librairies (stdio.h ...) non ?
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 25 juin 2010 à 21:40
librairie => bilbliothèque (librairie est un faux ami du mot anglais library)
On ne met pas tout dans le .hh, c'est très très moche. stdio.h c'est du C, soit dit en passant :p
A noter que mettre du code dans une définition de classe, force l'inlining de celui-ci. Donc si tu veux maîtriser ton code, on met le code en dehors de la classe avec le choix des méthodes qui seront "inlinées" ou non.