Le souci apparait si dans une autre unité de compilation (un autre .cpp) tu définis une variable de type "complexe". A ce moment-là toutes tes methodes de classes, etant définies inline, ne sont pas accessible. En supprimant la définition des methodes de la classe "complexe" du .cpp et en le mettant dans le header, devrait suffire à supprimer les erreurs.
"nico" <spam@spam.spam> a écrit dans le message de
news:41cffe7d$0$16239$636a15ce@news.free.fr...
Bonjour,
L'utilisation du mot clef inline provoque des messages d'erreur du linker,
j'ai reproduit le prob avec une classe simple :
Le souci apparait si dans une autre unité de compilation (un autre .cpp) tu
définis une variable de type "complexe". A ce moment-là toutes tes methodes
de classes, etant définies inline, ne sont pas accessible. En supprimant la
définition des methodes de la classe "complexe" du .cpp et en le mettant
dans le header, devrait suffire à supprimer les erreurs.
Le souci apparait si dans une autre unité de compilation (un autre .cpp) tu définis une variable de type "complexe". A ce moment-là toutes tes methodes de classes, etant définies inline, ne sont pas accessible. En supprimant la définition des methodes de la classe "complexe" du .cpp et en le mettant dans le header, devrait suffire à supprimer les erreurs.
Anthony Fleury
nico wrote:
Bonjour,
Bonjour,
L'utilisation du mot clef inline provoque des messages d'erreur du linker, j'ai reproduit le prob avec une classe simple :
Ca doit être une FAQ ca. Les fonctions inlines doivent être définies partout où elles sont utilisées, c'est à dire que le code de la fonction doit être visible dans tous les fichiers où elle est appellée.
Pour des fonctions aussi petites, à la place de mettre du inline partout, mieux vaut mettre la définition de la fonction dans la classe directement. Sinon au choix : - mettre les définitions des fonctions dans le fichier .h de la classe en dehors de cette classe (genre en dessous de la classe - les mettres dans un fichier (exemple .inl) qui sera inclu juste derrière la définition de la classe
Ou même certains s'amusent à inclure le fichier .cpp.
Le même problème existe pour les template avec bon nombre de compilateurs actuels.
Anthony -- Alan Turing thought about criteria to settle the question of whether machines can think, a question of which we now know that it is about as relevant as the question of whether submarines can swim. -- Dijkstra
nico wrote:
Bonjour,
Bonjour,
L'utilisation du mot clef inline provoque des messages d'erreur du linker,
j'ai reproduit le prob avec une classe simple :
Ca doit être une FAQ ca. Les fonctions inlines doivent être définies partout
où elles sont utilisées, c'est à dire que le code de la fonction doit être
visible dans tous les fichiers où elle est appellée.
Pour des fonctions aussi petites, à la place de mettre du inline partout,
mieux vaut mettre la définition de la fonction dans la classe directement.
Sinon au choix :
- mettre les définitions des fonctions dans le fichier .h de la classe en
dehors de cette classe (genre en dessous de la classe
- les mettres dans un fichier (exemple .inl) qui sera inclu juste derrière
la définition de la classe
Ou même certains s'amusent à inclure le fichier .cpp.
Le même problème existe pour les template avec bon nombre de compilateurs
actuels.
Anthony
--
Alan Turing thought about criteria to settle the question of whether
machines can think, a question of which we now know that it is about as
relevant as the question of whether submarines can swim.
-- Dijkstra
Ca doit être une FAQ ca. Les fonctions inlines doivent être définies partout où elles sont utilisées, c'est à dire que le code de la fonction doit être visible dans tous les fichiers où elle est appellée.
Pour des fonctions aussi petites, à la place de mettre du inline partout, mieux vaut mettre la définition de la fonction dans la classe directement. Sinon au choix : - mettre les définitions des fonctions dans le fichier .h de la classe en dehors de cette classe (genre en dessous de la classe - les mettres dans un fichier (exemple .inl) qui sera inclu juste derrière la définition de la classe
Ou même certains s'amusent à inclure le fichier .cpp.
Le même problème existe pour les template avec bon nombre de compilateurs actuels.
Anthony -- Alan Turing thought about criteria to settle the question of whether machines can think, a question of which we now know that it is about as relevant as the question of whether submarines can swim. -- Dijkstra
nico
Bonjour,
Merci pour les réponses.
En fait je voulais séparer l'interface de la définition pour avoir un code plus clair (donc mettre les definition ds le cpp) mais bon apparemment ca pose problème pour les inline je vais donc tout mettre ds le .h.
Merci.
-- nico
nico wrote:
Bonjour,
L'utilisation du mot clef inline provoque des messages d'erreur du linker, j'ai reproduit le prob avec une classe simple :
En fait je voulais séparer l'interface de la définition pour avoir un code
plus clair (donc mettre les definition ds le cpp) mais bon apparemment ca
pose problème pour les inline je vais donc tout mettre ds le .h.
Merci.
--
nico
nico wrote:
Bonjour,
L'utilisation du mot clef inline provoque des messages d'erreur du
linker, j'ai reproduit le prob avec une classe simple :
En fait je voulais séparer l'interface de la définition pour avoir un code plus clair (donc mettre les definition ds le cpp) mais bon apparemment ca pose problème pour les inline je vais donc tout mettre ds le .h.
Merci.
-- nico
nico wrote:
Bonjour,
L'utilisation du mot clef inline provoque des messages d'erreur du linker, j'ai reproduit le prob avec une classe simple :
En fait je voulais séparer l'interface de la définition pour avoir un code plus clair (donc mettre les definition ds le cpp) mais bon apparemment ca pose problème pour les inline je vais donc tout mettre ds le .h.
Généralement, la facon de faire consiste à avoir un #include "fichier.inl" à la fin de ton fichier.h, et de mettre l'implémentation des fonctions dans ton fichier.inl
-- Vincent
En fait je voulais séparer l'interface de la définition pour avoir un code
plus clair (donc mettre les definition ds le cpp) mais bon apparemment ca
pose problème pour les inline je vais donc tout mettre ds le .h.
Généralement, la facon de faire consiste à avoir un #include "fichier.inl" à
la fin de ton fichier.h, et de mettre l'implémentation des fonctions dans
ton fichier.inl
En fait je voulais séparer l'interface de la définition pour avoir un code plus clair (donc mettre les definition ds le cpp) mais bon apparemment ca pose problème pour les inline je vais donc tout mettre ds le .h.
Généralement, la facon de faire consiste à avoir un #include "fichier.inl" à la fin de ton fichier.h, et de mettre l'implémentation des fonctions dans ton fichier.inl
-- Vincent
nico
Ok merci ca marche, je retiens cette solution.
-- nico
Vincent Lascaux wrote:
En fait je voulais séparer l'interface de la définition pour avoir un code plus clair (donc mettre les definition ds le cpp) mais bon apparemment ca pose problème pour les inline je vais donc tout mettre ds le .h.
Généralement, la facon de faire consiste à avoir un #include "fichier.inl" à la fin de ton fichier.h, et de mettre l'implémentation des fonctions dans ton fichier.inl
Ok merci ca marche, je retiens cette solution.
--
nico
Vincent Lascaux wrote:
En fait je voulais séparer l'interface de la définition pour avoir
un code plus clair (donc mettre les definition ds le cpp) mais bon
apparemment ca pose problème pour les inline je vais donc tout
mettre ds le .h.
Généralement, la facon de faire consiste à avoir un #include
"fichier.inl" à la fin de ton fichier.h, et de mettre
l'implémentation des fonctions dans ton fichier.inl
En fait je voulais séparer l'interface de la définition pour avoir un code plus clair (donc mettre les definition ds le cpp) mais bon apparemment ca pose problème pour les inline je vais donc tout mettre ds le .h.
Généralement, la facon de faire consiste à avoir un #include "fichier.inl" à la fin de ton fichier.h, et de mettre l'implémentation des fonctions dans ton fichier.inl