Plus couramment, ce serait un truc :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 // f.h inline int func() { return 3; } // unit1.cpp #include "f.h" // unit2.cpp #include "f.h"
Plus couramment, ce serait un truc :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 // f.h inline int func() { return 3; } // unit1.cpp #include "f.h" // unit2.cpp #include "f.h"
Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.
Oui, c'est l'utilisation habituelle.
Mon blog anglais - Mes articles et critiques de livres - FAQ C++0x, avec liste des nouveautés - Conseils sur le C++ - La meilleure FAQ du monde - Avant de créer des classes que vous réutiliserez, regardez si ça n'existe pas déjà - Le site du comité de normalisation du C++
Le guide pour bien débuter en C++ - Cours et tutoriels pour apprendre C++
ainsi que
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 // unit1.cpp inline int func() { return 3; }non? enfin c'est juste pour être sur d'avoir compris. Du coup la fonction utilisée dans unit1.cpp et unit2.cpp seront différente?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 // unit2.cpp inline int func() { return 5; }
Et sans le inline? cela donne une erreur de link car définition multiple?
Sans inline, définition multiple, erreur au link.
Avec inline, aucun diagnostic n'est requis, mais tu violes la one definition rule.
Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.
sorry. mais ça compilera avec les inline...
et avec les template??
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 //AA.h template <typename T> struct AA { T test(); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 // unit1.cpp #include "AA.h" inline template <typename T> T AA::test() { return static_cast<T>(3); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 // unit2.cpp #include "AA.h" inline template <typename T> T AA::test() { return static_cast<T>(5); }
Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.
Et en les déclarant static en plus de inline ?Envoyé par JolyLoic
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Si elles sont statiques, il s'agit de deux fonctions différentes, qui n'ont aucun lien entre elles. Qu'elles soient inline ou pas.
Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.
OK. Donc, pour le standard, les fonctions inline ne sont pas implicitement statiques.
Contrairement au comportement du compilateur de Microsoft... Encore que le "unless otherwise specified" me laisse des doutes...
Envoyé par [url=http://msdn2.microsoft.com/en-us/library/z8y1yy88(VS.80).aspx]MSDN[/url]
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
C'est sans doute parce que tu as une préséence au niveau des storage class specifiers (static, extern et autres) qui peut venir chambouler la portée de la liaison
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Si j'ai bonne memoire, un des effets de l'implementation d'export dans EDG c'est que ca l'a rendu capable de diagnostiquer certaines violations de l'ODR. Je suppose que c'est un effet possible aussi de l'implementation d'optimisation globale (au minimum ca doit faire des choses "amusantes" avec les programmes qui violent l'ODR).
Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.
Pour des tests assez profonds de l'ODR, je devine en effet que l'implémentation d'export puisse aider, en ce qu'elle impose de clarifier le contexte de définition de la fonction.
Par contre, pour des cas bêtes comme on a pu citer ici, je pense que la condition : "each definition of D shall consist of the same sequence of tokens;" pourrait être détectée assez trivialement, lors par exemple de l'optimisation globale.
Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.
Effectivement, je dois mélanger avec quelque chose d'autre.Un typedef ne crée aucune instance du template.
Je vous remerci pour vos réponses mais vous vous eloignés quelque peu du sujet.
Personne donc n'aurai d'idée ?
Le problème devrait venir du compilateur lui-même s'il n'y a pas d'erreur avec VC2005.
Est-ce que quelqu'un a déja réussi à compiler quelque chose de similaire ou pas, sous VC6 ?
Merci.
Du coup, j'ai installer VC2005 express et compilé le même code avec. Le compilateur de trouve aucune erreur et le programme marche sans bug.
J'en conclu donc que le problème proviens de VC6. Je vais être obligé de changer de compilo.
Bref. Merci à vous tous de m'avoir répondu.
A une prochaine.
Si tu ne le savais pas déjà, VC6 est loin de coller à la norme du C++, particulièrement en ce qui concerne les templates, par exemple.
Mon blog anglais - Mes articles et critiques de livres - FAQ C++0x, avec liste des nouveautés - Conseils sur le C++ - La meilleure FAQ du monde - Avant de créer des classes que vous réutiliserez, regardez si ça n'existe pas déjà - Le site du comité de normalisation du C++
Le guide pour bien débuter en C++ - Cours et tutoriels pour apprendre C++
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager