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

Template : Implicit typename is deprecated

4 réponses
Avatar
Bruno CAUSSE
Bonjour,

J'essaie de mettre en conformité un ancien (2001) code

J'ai des warnings avec gcc 3.3 et des erreurs avec la version 4.01

Malgres mes recherches je coince :-( (je suis loin d'etre confirmé)

Voilà le code qui me pose probleme :

class CMsg {

public:

CMsg(const string& sMsg, const string& asFrom);

string sRawText, sFrom;

};


template<class TRules>
class CMsgSGJoin: public CMsg {

public:

CMsgSGJoin(const string& sMsg, const string& asFrom, istream& is,
CSGBase* pSg);

virtual ~CMsgSGJoin();

string idg;

typename TRules::TGame game;

};


template<class TRules>
class CSG : public CSGBase {
public:
typedef typename TRules::TMatchType TMatchType;
typedef typename TRules::TBoardType TBoardType;
typedef typename TRules::TGame TGame;

typedef CSGRequest<TRules> TRequest;

typedef CMsgSGAbortRequest TMsgAbortRequest;
.../...
typedef CMsgSGJoin<TRules> TMsgJoin;
.../..
typedef CMsgSGWho<TRules> TMsgWho;

CSG(ggsstream* apgs);
virtual ~CSG() {};

.../...
}

template <class TRules>
class CServiceGDK : public CSG<TRules> {
public:
CServiceGDK(ggsstream* apgs);

virtual void HandleJoin (const TMsgJoin& msg); <======= ca coince ici
.../...
virtual void MakeMoveIfNeeded(const string& idg);
};

template <class TRules>
void CServiceGDK<TRules>::HandleJoin(const TMsgJoin& msg) {
BaseJoin(msg);
MakeMoveIfNeeded(msg.idg);
}

Je pense qu'il manque "typename" quelque part.

Merci de votre aide.

--
bruno

4 réponses

Avatar
Stephane Wirtel
Bruno CAUSSE said the following on 19/01/2006 11:25:
Bonjour,

J'essaie de mettre en conformité un ancien (2001) code

J'ai des warnings avec gcc 3.3 et des erreurs avec la version 4.01

Malgres mes recherches je coince :-( (je suis loin d'etre confirmé)

Voilà le code qui me pose probleme :

class CMsg {

public:

CMsg(const string& sMsg, const string& asFrom);

string sRawText, sFrom;

};


template<class TRules>
class CMsgSGJoin: public CMsg {

public:

CMsgSGJoin(const string& sMsg, const string& asFrom, istream& is,
CSGBase* pSg);

virtual ~CMsgSGJoin();

string idg;

typename TRules::TGame game;

};


template<class TRules>
class CSG : public CSGBase {
public:
typedef typename TRules::TMatchType TMatchType;
typedef typename TRules::TBoardType TBoardType;
typedef typename TRules::TGame TGame;

typedef CSGRequest<TRules> TRequest;

typedef CMsgSGAbortRequest TMsgAbortRequest;
.../...
typedef CMsgSGJoin<TRules> TMsgJoin;
.../..
typedef CMsgSGWho<TRules> TMsgWho;

CSG(ggsstream* apgs);
virtual ~CSG() {};

.../...
}
Au lieu de redéfinir TMatchType, TBoardType et TGame, je pense que tu peux faire

using typename TRules::TMatchType;
using typename TRules::TBoardType;
using typename TRules::TGame;


template <class TRules>
class CServiceGDK : public CSG<TRules> {
public:
CServiceGDK(ggsstream* apgs);

virtual void HandleJoin (const TMsgJoin& msg); <======= ca coince ici


Quelle est l'erreur exacte du compilateur ?
.../...
virtual void MakeMoveIfNeeded(const string& idg);
};

template <class TRules>
void CServiceGDK<TRules>::HandleJoin(const TMsgJoin& msg) {
BaseJoin(msg);
MakeMoveIfNeeded(msg.idg);
}

Je pense qu'il manque "typename" quelque part.

Merci de votre aide.

--
bruno



Avatar
Jean-Marc Bourguet
Bruno CAUSSE writes:

template <class TRules>
class CServiceGDK : public CSG<TRules> {
public:
CServiceGDK(ggsstream* apgs);

virtual void HandleJoin (const TMsgJoin& msg); <======= ca coince ici


TMsgJoin n'est pas cherche dans la classe de base CSG<TRules> parce
qu'elle depend d'un parametre template.

typename CSG<TRules>::TMsgJoin

devrait fonctionner, mais il y a peut-etre plus simple.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
Bruno CAUSSE
dans l'article , Jean-Marc Bourguet à
a écrit le 19/01/06 13:37 :

TMsgJoin n'est pas cherche dans la classe de base CSG<TRules> parce
qu'elle depend d'un parametre template.

typename CSG<TRules>::TMsgJoin

devrait fonctionner, mais il y a peut-etre plus simple.


Et si je mets dans CSG :

Typedef typename CSG<TRules>::CMsgSGJoin<TRules> TMsgJoin;

Je pense (deduction de mes recherche + ton message) qu'il manque en effet la
classe de base.

Avatar
pasde.hcyrano.spam
Jean-Marc Bourguet wrote:

ypename CSG<TRules>::TMsgJoin

devrait fonctionner, mais il y a peut-etre plus simple.


ca fonctionne :-)

merci



--
Bruno Causse
http://perso.wanadoo.fr/othello