Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Constructeur d'une inner class template

3 réponses
Avatar
Guillaume Gourdin
Bonjour à tous !

Je suis dans le cas de figure suivant :

template <class T> class A
{
class B
{
B();
}
}

Pour implémenter le constructeur de la classe B, je fais comme suis, plus
bas dans le .h :
template <class T> A<T>::B::B() {........}

Le problème, c'est qu'apparement ce n'est pas ça, car quand je crée un
élement B, j'ai une erreur de link qui m'informe que le constructeur de B
n'est pas trouvé. Quelqu'un pourrait m'aider ? Je suis sous VC6.

Merci.

3 réponses

Avatar
Rochefort Gilles
Bonjour à tous !

Je suis dans le cas de figure suivant :

template <class T> class A
{
class B
{
B();
}
}

Pour implémenter le constructeur de la classe B, je fais comme suis, plus
bas dans le .h :
template <class T> A<T>::B::B() {........}


Bonjour,

Mis à part les ; qui manquent à la fin de chaque déclaration de classe
pour moi ca compile et link correctement avec g++ 3.2.2

Voici le code que j'ai compilé et lié :

#include <iostream>

using namespace std;

template <class T>
class A
{
class B
{
B();
};
};


template <class T>
A<T>::B::B()
{

}

int main (void)
{

A<double> a;
return 0;
}

Avatar
Guillaume Gourdin
int main (void)
{

A<double> a;
return 0;
}


Le problème vient de l'instanciation de B. Genre :

int main (void)
{
A<double>::B b;
return 0;
}

Avatar
Rochefort Gilles
On Thu, 12 Aug 2004 14:38:48 +0200, Guillaume Gourdin wrote:

int main (void)
{

A<double> a;
return 0;
}


Le problème vient de l'instanciation de B. Genre :

int main (void)
{
A<double>::B b;
return 0;
}


Il convient dans ce cas de déclarer les constructeurs en public ...

#include <iostream>

using namespace std;

template <class T>
class A
{
public:
class B
{
public:
B();
};
};


template <class T>
A<T>::B::B()
{

}

int main (void)
{

A<double> a;
A<double>::B b;
return 0;
}