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<------------------------
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...
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.
Fabien LE LEZ
On Fri, 3 Aug 2007 17:39:21 +0200, "AG" :
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> 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;
AG
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.]
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.
Michael DOUBEZ
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;
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;
};
//instanciation de la static de class
template<class T, class V>
I<T> A<T,V>::myI;
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...
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
//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 :
//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 :
//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 :
Le programme suivant compile très bien sur gcc3.4: //test.hpp //------------------8<----------------------- template<class T> class I { public: I(){} I(const T& t):var(t){}
T var; };
template<class T, class V> class A { public: static I<T> myI; };
template<class T, class V> I<T> A<T,V>::myI=I<T>(); //------------------8<-----------------------
Le programme suivant compile très bien sur gcc3.4:
//test.hpp
//------------------8<-----------------------
template<class T> class I
{
public:
I(){}
I(const T& t):var(t){}
T var;
};
template<class T, class V> class A
{
public:
static I<T> myI;
};
template<class T, class V>
I<T> A<T,V>::myI=I<T>();
//------------------8<-----------------------
Le programme suivant compile très bien sur gcc3.4: //test.hpp //------------------8<----------------------- template<class T> class I { public: I(){} I(const T& t):var(t){}
T var; };
template<class T, class V> class A { public: static I<T> myI; };
template<class T, class V> I<T> A<T,V>::myI=I<T>(); //------------------8<-----------------------