// Définition d'un membre static d'une template: ça marche
template<typename T>
class TemplateClass1
{
static int s_Int;
};
template<typename T>
int TemplateClass1<T>::s_Int;
// Définition d'un membre static d'un type interne d'une template:
// ça NE marche PAS
template<typename T>
class TemplateClass2
{
class InsideClass {};
static InsideClass s_Inside;
};
// C'est ici que ça se corse:
// gcc renvoit l'erreur suivante:
// error: expected constructor, destructor,
// or type conversion before 'TemplateClass2'
template<typename T>
TemplateClass2<T>::InsideClass TemplateClass2<T>::s_Inside;
Je ne comprends pas mon erreur...
Je vous remercie d'avance pour toutes les informations que vous pourrez me
donner.
--
Vincent Jacques
"S'il n'y a pas de solution, c'est qu'il n'y a pas de problème"
Devise Shadocks
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
fabien.chene
Vincent Jacques writes:
// Définition d'un membre static d'un type interne d'une template: // ça NE marche PAS
template<typename T> class TemplateClass2 { class InsideClass {}; static InsideClass s_Inside; };
// C'est ici que ça se corse: // gcc renvoit l'erreur suivante: // error: expected constructor, destructor, // or type conversion before 'TemplateClass2' template<typename T> TemplateClass2<T>::InsideClass TemplateClass2<T>::s_Inside; ^
Il manque « typename » ici. TemplateClass2<T>::InsideClass est un nom dépendant (de T), qui se réfère à un type.
Vincent Jacques <vincent.jacques@student.ecp.fr> writes:
// Définition d'un membre static d'un type interne d'une template:
// ça NE marche PAS
template<typename T>
class TemplateClass2
{
class InsideClass {};
static InsideClass s_Inside;
};
// C'est ici que ça se corse:
// gcc renvoit l'erreur suivante:
// error: expected constructor, destructor,
// or type conversion before 'TemplateClass2'
template<typename T>
TemplateClass2<T>::InsideClass TemplateClass2<T>::s_Inside;
^
Il manque « typename » ici. TemplateClass2<T>::InsideClass est un nom
dépendant (de T), qui se réfère à un type.
// Définition d'un membre static d'un type interne d'une template: // ça NE marche PAS
template<typename T> class TemplateClass2 { class InsideClass {}; static InsideClass s_Inside; };
// C'est ici que ça se corse: // gcc renvoit l'erreur suivante: // error: expected constructor, destructor, // or type conversion before 'TemplateClass2' template<typename T> TemplateClass2<T>::InsideClass TemplateClass2<T>::s_Inside; ^
Il manque « typename » ici. TemplateClass2<T>::InsideClass est un nom dépendant (de T), qui se réfère à un type.
// Définition d'un membre static d'un type interne d'une template: // ça NE marche PAS
template<typename T> class TemplateClass2 { class InsideClass {}; static InsideClass s_Inside; };
// C'est ici que ça se corse: // gcc renvoit l'erreur suivante: // error: expected constructor, destructor, // or type conversion before 'TemplateClass2' template<typename T> TemplateClass2<T>::InsideClass TemplateClass2<T>::s_Inside;
Les noms dépendants ne sont pas des noms de types par défaut.
-- Franck Branjonneau
Vincent Jacques <vincent.jacques@student.ecp.fr> écrivait:
// Définition d'un membre static d'un type interne d'une template:
// ça NE marche PAS
template<typename T>
class TemplateClass2
{
class InsideClass {};
static InsideClass s_Inside;
};
// C'est ici que ça se corse:
// gcc renvoit l'erreur suivante:
// error: expected constructor, destructor,
// or type conversion before 'TemplateClass2'
template<typename T>
TemplateClass2<T>::InsideClass TemplateClass2<T>::s_Inside;
// Définition d'un membre static d'un type interne d'une template: // ça NE marche PAS
template<typename T> class TemplateClass2 { class InsideClass {}; static InsideClass s_Inside; };
// C'est ici que ça se corse: // gcc renvoit l'erreur suivante: // error: expected constructor, destructor, // or type conversion before 'TemplateClass2' template<typename T> TemplateClass2<T>::InsideClass TemplateClass2<T>::s_Inside;