Niouzes.org  

Précédent   Niouzes.org > Forum > Newsgroup fr.comp.lang.* Forum > Newsgroup fr.comp.lang.c++
S'inscrire FAQ Membres Calendrier Recherche Messages du jour Marquer les forums comme lus



Réponse

 

LinkBack Outils de la discussion Modes d'affichage
  #1 (permalink)  
Vieux 03/08/2007, 16h39
AG
 
Messages: n/a
Par défaut initialisation d'un membre-class static d'une class, avec des templates partout

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.


Réponse avec citation
Alt Today
Advertising
Google Adsense
 
This advertising will not be shown
in this way to registered members.
Register your free account today
and become a member on
Niouzes.org
Standard Sponsored Links

  #2 (permalink)  
Vieux 03/08/2007, 16h51
AG
 
Messages: n/a
Par défaut Re: initialisation d'un membre-class static d'une class, avec des templates partout

> I<int> A<int,double>::myI; // ligne 13
template<> I<int> A<int,double>::myI;

c'est une spécialisation.... off course.

AG.


Réponse avec citation
  #3 (permalink)  
Vieux 03/08/2007, 16h51
AG
 
Messages: n/a
Par défaut Re: initialisation d'un membre-class static d'une class, avec des templates partout

> I<int> A<int,double>::myI; // ligne 13
template<> I<int> A<int,double>::myI;

c'est une spécialisation.... off course.

AG.


Réponse avec citation
  #4 (permalink)  
Vieux 06/08/2007, 09h48
AG
 
Messages: n/a
Par défaut Re: initialisation d'un membre-class static d'une class, avec des templates partout

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.


Réponse avec citation
  #5 (permalink)  
Vieux 06/08/2007, 09h48
AG
 
Messages: n/a
Par défaut Re: initialisation d'un membre-class static d'une class, avec des templates partout

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.


Réponse avec citation
  #6 (permalink)  
Vieux 06/08/2007, 10h06
Fabien LE LEZ
 
Messages: n/a
Par défaut Re: initialisation d'un membre-class static d'une class, avec des templates partout

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;


Réponse avec citation
  #7 (permalink)  
Vieux 06/08/2007, 10h06
Fabien LE LEZ
 
Messages: n/a
Par défaut Re: initialisation d'un membre-class static d'une class, avec des templates partout

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;


Réponse avec citation
  #8 (permalink)  
Vieux 06/08/2007, 10h15
AG
 
Messages: n/a
Par défaut Re: initialisation d'un membre-class static d'une class, avec des templates partout

> 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.


Réponse avec citation
  #9 (permalink)  
Vieux 06/08/2007, 10h15
AG
 
Messages: n/a
Par défaut Re: initialisation d'un membre-class static d'une class, avec des templates partout

> 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.


Réponse avec citation
  #10 (permalink)  
Vieux 06/08/2007, 10h37
Michael DOUBEZ
 
Messages: n/a
Par défaut Re: initialisation d'un membre-class static d'une class, avec destemplates partout

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.
>
>

Réponse avec citation
  #11 (permalink)  
Vieux 06/08/2007, 10h37
Michael DOUBEZ
 
Messages: n/a
Par défaut Re: initialisation d'un membre-class static d'une class, avec destemplates partout

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.
>
>

Réponse avec citation
  #12 (permalink)  
Vieux 06/08/2007, 11h00
AG
 
Messages: n/a
Par défaut Re: initialisation d'un membre-class static d'une class, avec des templates partout

> //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


Réponse avec citation
 
Réponse
Tags: , , , , ,



Outils de la discussion
Modes d'affichage

Règles de messages
Vous pouvez ouvrir de nouvelles discussions : nonoui
Vous pouvez envoyer des réponses : nonoui
Vous pouvez insérer des pièces jointes : nonoui
Vous pouvez modifier vos messages : nonoui

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Discussions similaires

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


Fuseau horaire GMT. Il est actuellement 16h19.

Italiano - German - English - Español


Édité par : vBulletin® version 3.6.8
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO 3.1.0 © 2007, Crawlability, Inc. Tous droits réservés.
Version française #13 par l'association vBulletin francophone


Politique - Droit - Philosophie - Football - Medicine - Française - Bricolage - Photo - Mac Os X - Divers - Physique - Jardinage
Mecanique - Moto - Photographie - Rail - Route - Aviation - Cinema - Linux - Psychanalyse - Finance - Enigmes - Rugby
Environnement - Histoire - Programmes TV - Education - Travail - Voyages - Windows - Immobilier - Cuisine
Windows XP - Excel - Word - Outlook - Access - Internet Explorer - Office - Vista

Page generated in 0,46078 seconds with 11 queries