Forum Clubic

[Résolu] Problème Template C++ dans GCC

Voilà un petit bout de code (synthétique, juste pour illustrer mon problème)


template <typename TYPE>
class ScalaireT
{
protected:
	TYPE m_Data;
};

template <typename TYPE>
class ScalaireZeroT : public ScalaireT<TYPE>
{
public:
	ScalaireZeroT()
	{
  m_Data = 0;
	}
};

int main()
{
	ScalaireT<double> a;
	return 0;
}


Ce code compile sans problème avec icc (Intel C Compiler) ou Visual C++ par contre sous GCC 3.4.4 j’ai cette erreur:


$ g++ TestTemplate.cpp
TestTemplate.cpp: In constructor `ScalaireZeroT<TYPE>::ScalaireZeroT()':
TestTemplate.cpp:14: error: `m_Data' undeclared (first use this function)
TestTemplate.cpp:14: error: (Each undeclared identifier is reported only once for each function it appears in.)

Voilà, je sais que gcc est un peu chiant sur la syntaxe des templates, alors si quelqu’un pouvait m’éclairer, ça m’aiderai grandement. (ça me permettrait de bosser sur un projet hors de chez moi sur des machines unix)

Alors j’ai testé,

template <typename TYPE>
class ScalaireT
{
protected:
TYPE m_Data;

};

template <typename TYPE>
class ScalaireZeroT : public ScalaireT<TYPE>
{
public:
ScalaireZeroT()
{
 ScalaireT<TYPE>::m_Data = 0;
}
};

int main()
{
ScalaireT<double> a;
return 0;
}

Un peu barbare ceci dit… tout ça pour accéder à un champ protected :o (je demanderai à mon chargé de td de c++)

Ok merci :slight_smile:

j’ai fait this->m_Data ça marche aussi.

Mais c’est pas une question de protected, c’est une spécificité des classe template dérivée.