![]() |
| |||||||
| S'inscrire | FAQ | Membres | Calendrier | Recherche | Messages du jour | Marquer les forums comme lus |
![]() |
| LinkBack | Outils de la discussion | Modes d'affichage |
| |||
| Bonjour, je n'arrive pas à compiler cela : template<class T> class I { T var; }; template<class T, class V> class A { public: static I<T> myI; }; I<int> A<int,double>::myI; // ligne 13 int main(void) { A<int,double> myA; return 0; } $ g++ test.cpp test.cpp:13: error: too few template-parameter-lists AG. |
| | ||||
| ||||
| |
| |||
| pfff.. je croyais m'en tirer, et en fait non : test.h ------------------8<----------------------- template<class T> class I { public: T var; }; template<class T, class V> class A { public: static I<T> myI; }; ------------------8<------------------------ test.cpp ------------------8<------------------------ #include "test.h" template<> I<int> A<int,double>::myI; ------------------8<------------------------ main.cpp ------------------8<------------------------ #include "test.h" int main(void) { A<int,double> myA; I<int> ii = A<int,double>::myI; return 0; } -------------------8<------------------------ et là, ça bloque à l'édition de liens : $ make test g++ -c main.cpp g++ -c test.cpp g++ -o test main.o test.o main.o:main.cpp .text+0x2b): undefined reference to `A<int, double>::myI'collect2: ld returned 1 exit status make: *** [test] Error 1 j'utilise gcc version 3.4.4 (cygming special, gdc 0.12, using dmd 0.125) sous cygwin. J'ai essayé de rajouter la déclaration de variable myI à plusieurs endroits, mais sans succes. J'aurais besoin d'aide... Merci AG. |
| |||
| pfff.. je croyais m'en tirer, et en fait non : test.h ------------------8<----------------------- template<class T> class I { public: T var; }; template<class T, class V> class A { public: static I<T> myI; }; ------------------8<------------------------ test.cpp ------------------8<------------------------ #include "test.h" template<> I<int> A<int,double>::myI; ------------------8<------------------------ main.cpp ------------------8<------------------------ #include "test.h" int main(void) { A<int,double> myA; I<int> ii = A<int,double>::myI; return 0; } -------------------8<------------------------ et là, ça bloque à l'édition de liens : $ make test g++ -c main.cpp g++ -c test.cpp g++ -o test main.o test.o main.o:main.cpp .text+0x2b): undefined reference to `A<int, double>::myI'collect2: ld returned 1 exit status make: *** [test] Error 1 j'utilise gcc version 3.4.4 (cygming special, gdc 0.12, using dmd 0.125) sous cygwin. J'ai essayé de rajouter la déclaration de variable myI à plusieurs endroits, mais sans succes. J'aurais besoin d'aide... Merci AG. |
| |||
| On Fri, 3 Aug 2007 17:39:21 +0200, "AG" <ag***tb.fr>: >template<class T, class V> class A >{ > public: > static I<T> myI; Ici, tu déclares une variable membre statique. >}; > >I<int> A<int,double>::myI; // ligne 13 Pourquoi diable ne l'instancies-tu pas avec les mêmes paramètres ? template <class T, class V> I<T> A<T,V>::myI; |
| |||
| On Fri, 3 Aug 2007 17:39:21 +0200, "AG" <ag***tb.fr>: >template<class T, class V> class A >{ > public: > static I<T> myI; Ici, tu déclares une variable membre statique. >}; > >I<int> A<int,double>::myI; // ligne 13 Pourquoi diable ne l'instancies-tu pas avec les mêmes paramètres ? template <class T, class V> I<T> A<T,V>::myI; |
| |||
| > Pourquoi diable ne l'instancies-tu pas avec les mêmes paramètres ? > > template <class T, class V> I<T> A<T,V>::myI; Certes, merci Fabien de me montrer qu'il est aussi possible de l'instancier avec le template. C'est plus clair. [Cela dit, je ne sais pas si tu as vu mon troisième post, mais cette instanciation ne change pas mon problème de compilation unit.] Alexandre. |
| |||
| > Pourquoi diable ne l'instancies-tu pas avec les mêmes paramètres ? > > template <class T, class V> I<T> A<T,V>::myI; Certes, merci Fabien de me montrer qu'il est aussi possible de l'instancier avec le template. C'est plus clair. [Cela dit, je ne sais pas si tu as vu mon troisième post, mais cette instanciation ne change pas mon problème de compilation unit.] Alexandre. |
| |||
| AG a écrit : > pfff.. je croyais m'en tirer, et en fait non : > > test.h > ------------------8<----------------------- > template<class T> class I > { > public: > T var; > }; > > template<class T, class V> class A > { > public: > static I<T> myI; > }; //instanciation de la static de class template<class T, class V> I<T> A<T,V>::myI; > ------------------8<------------------------ > > test.cpp > ------------------8<------------------------ > #include "test.h" > > template<> > I<int> A<int,double>::myI; Je ne crois pas que ça instancie la statique. Essaye de l'affecter. template<> I<int> A<int,double>::myI=0; > ------------------8<------------------------ > > main.cpp > ------------------8<------------------------ > #include "test.h" > > > int main(void) > { > A<int,double> myA; > I<int> ii = A<int,double>::myI; > return 0; > } > -------------------8<------------------------ > > et là, ça bloque à l'édition de liens : > $ make test > g++ -c main.cpp > g++ -c test.cpp > g++ -o test main.o test.o > main.o:main.cpp .text+0x2b): undefined reference to `A<int, double>::myI'> collect2: ld returned 1 exit status > make: *** [test] Error 1 > > j'utilise gcc version 3.4.4 (cygming special, gdc 0.12, using dmd 0.125) > sous cygwin. > > J'ai essayé de rajouter la déclaration de variable myI à plusieurs endroits, > mais sans succes. J'aurais besoin d'aide... > > Merci > > AG. > > |
| |||
| AG a écrit : > pfff.. je croyais m'en tirer, et en fait non : > > test.h > ------------------8<----------------------- > template<class T> class I > { > public: > T var; > }; > > template<class T, class V> class A > { > public: > static I<T> myI; > }; //instanciation de la static de class template<class T, class V> I<T> A<T,V>::myI; > ------------------8<------------------------ > > test.cpp > ------------------8<------------------------ > #include "test.h" > > template<> > I<int> A<int,double>::myI; Je ne crois pas que ça instancie la statique. Essaye de l'affecter. template<> I<int> A<int,double>::myI=0; > ------------------8<------------------------ > > main.cpp > ------------------8<------------------------ > #include "test.h" > > > int main(void) > { > A<int,double> myA; > I<int> ii = A<int,double>::myI; > return 0; > } > -------------------8<------------------------ > > et là, ça bloque à l'édition de liens : > $ make test > g++ -c main.cpp > g++ -c test.cpp > g++ -o test main.o test.o > main.o:main.cpp .text+0x2b): undefined reference to `A<int, double>::myI'> collect2: ld returned 1 exit status > make: *** [test] Error 1 > > j'utilise gcc version 3.4.4 (cygming special, gdc 0.12, using dmd 0.125) > sous cygwin. > > J'ai essayé de rajouter la déclaration de variable myI à plusieurs endroits, > mais sans succes. J'aurais besoin d'aide... > > Merci > > AG. > > |
| |||
| > //instanciation de la static de class > template<class T, class V> > I<T> A<T,V>::myI; ok, comme me l'a fait remarqué Fabien. Mais ne résoud pas le problème, comme indiqué dans ma réponse à Fabien. >> template<> >> I<int> A<int,double>::myI; > > Je ne crois pas que ça instancie la statique. Essaye de l'affecter. Visiblement, le problème vient de là puisqu'il est partiellement résolu (cf la suite). Pourquoi cette forme d'instanciation ne fonctionne-t-elle pas pour les statiques reste un mystère pour moi. > template<> > I<int> A<int,double>::myI=0; Après adapatation à mon code, la ligne suivante fait l'affaire : I<int> A<int,double>::myI=I<int>(); par contre, template<class T,class V> I<T> A<T,V>::myI=I<T>(); ne résoud pas mon problème. Pourquoi ? AG |
| |
| |
![]() |
| Tags: class, initialisation, membreclass, partout, static, templates |
| Outils de la discussion | |
| Modes d'affichage | |
| |
| ||||
| Discussion | Auteur | Forum | Réponses | Dernier message |
| class actions | Arcturus | Newsgroup fr.misc.finance | 3 | 06/05/2008 12h30 |
| U31 CLASS 212 ROBBE | Benoit | Newsgroup fr.rec.modelisme | 0 | 14/11/2007 09h47 |
| récursion sur un membre template d'une class template | AG | Newsgroup fr.comp.lang.c++ | 44 | 09/08/2007 16h06 |
| Précision sur l'utilisation d'une class. | Ben | Newsgroup alt.fr.comp.lang.php | 2 | 13/05/2007 17h08 |
| export c++ class | bv | Newsgroup microsoft.public.fr.vc | 30 | 04/08/2006 11h14 |