begin process at 2012 05 29 04:54:45
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Divers

 > 

fonction inline dans une classe (sous Qt)


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

fonction inline dans une classe (sous Qt)

vendredi 25 juin 2010 à 18:15:11 | fonction inline dans une classe (sous Qt)

debutant VB

Membre Club
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 :

----- main.cpp : -----

#include <conio.h>

#include "test.h"

int main(int argc, char *argv[])
{
MaClasse test;
test.dire_bonjour();
getch();
return 0;
}

----- test.h : -----

#ifndef TEST_H
#define TEST_H

#include <stdio.h>

class MaClasse {
public:
inline void dire_bonjour(void) const;
};

#endif // TEST_H

----- test.cpp : -----

#include "test.h"

void MaClasse::dire_bonjour(void) const
{
printf("Bonjour !\n");
}

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;
};

void MaClasse::dire_bonjour(void) const
{
printf("Bonjour !\n");
}

int main(int argc, char *argv[])
{
MaClasse test;
test.dire_bonjour();
getch();
return 0;
}

Serait-ce possible de rendre la fonction de ma classe inline tout en étant accessible à l'extérieur du fichier ?

Merci d'avance !
vendredi 25 juin 2010 à 18:30:16 | Re : fonction inline dans une classe (sous Qt)

CptPingu

Administrateur CodeS-SourceS
Réponse acceptée !
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
Code C/C++ :
#ifndef TEST_HH_
# define TEST_HH_

class Test
{
// ...
  void pouet();
  void truc();
};

# include "Test.hxx"

#endif /* !TEST_HH_ */


Test.hxx
Code C/C++ :
inline void
Test::pouet()
{
//...
}


Test.cc
Code C/C++ :
#include "Test.hh"

void
Test::pouet()
{
//...
}


main.cc
Code C/C++ :
#include "Test.hh"

void main()
{
  Test t;

  t.pouet();
  t.truc();

  return 0;
}



_____________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
vendredi 25 juin 2010 à 21:15:20 | Re : fonction inline dans une classe (sous Qt)

debutant VB

Membre Club

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 ?
vendredi 25 juin 2010 à 21:40:26 | Re : fonction inline dans une classe (sous Qt)

CptPingu

Administrateur CodeS-SourceS
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.

_____________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio


Cette discussion est classée dans : test, void, main, inline, maclasse


Répondre à ce message

Sujets en rapport avec ce message

Pb de déclaration multiple de variables [ par skirby ] Bonjour,J'ai un problème que je n'arrive pas à résoudre. Je dirais même que cela fait une éternité que je n'arrive pas à me servir correctement des in nafxcwd.lib [ par SW_87 ] Bonjour , Je souhaite telecharger la librairie nafxcwd.lib. Pourriez-vous me dire ou je peux la trouver ? De plus sur une fonction de callback, j' MFC, thread, callback, etc... La totale ! [ par SW_87 ] Bonjour , Je reprends mon problème car apparemment je me suis mal exprimé . J'ai créé une application "MFC AppWizzard (exe)" sous VC++ 6.0. que je n Créer .h ? [ par CHKDSK2K ] Bonjour à tous je voudrais créer un fichier .h sous turboc mais j'utilise surement pas la bonne methode alors j'ai créer un fichier  ICI.H et ICI.C qu Débutant : Inclusion de header dans main.cpp + problème de déclaration de classe [ par goddez ] Bonjour à tous :), Je rencontre un problème plutôt spéciale depuis 2 jours et je n'arrive pas à mettre le doigt sur ce qui n'est pas correct. Je décla compile à plusieurs fichiers [ par ntrvdonett ] Bonsoir,Au risque de faire rire, j'ai un problème de compilation en mettant une class dans un fichier à part, je rame depuis deux heure pour rien, et Problème classe et main : argument does not match [ par RS8 ] Bonjour,je fais actuellement de 'lOpenGL.Je voudrais avoir deux fichiers : drawing.cpp et main.cppDans le main.cpp il n'y a que le main et dans drawin exemple de thread [ par dambeaufort ] bonjour,Je ne comprend pas trés bien comment creer un thread.Est ce que quelqu'un d'entre vous pourrais me fournir un source qui permettent d'avoir 2 Casse-tête [ par alex1982 ] Bonjour, j'utilise visual dot net, et j'ai un problème avec mon code.Lorsque j'exécute le code suivant (très simple) :#include class essai{private : f Pointeur sur fonction envoyé par dll [ par MoDDiB ] Voila ce que j'ai fais mais ca ne marche pas :Dll :#include BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved){ retu


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,593 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales