Je place une classe de pointeur intelligent en utilisant les médicaments génériques et je voulais forcer les utilisateurs de cette classe pour construire correctement le pointeur intelligent en utilisant la syntaxeLe mot-clé explicite dans MS Visual Studio 4.1
MyReference<TestCls>(mytest3))
ou
MyReference<TestCls> mytest4(new TestCls());
j'ai donc utilisé le mot-clé explicite sur la CTOR, pour empêcher cela:
MyReference aRef = NULL;
Cependant, en raison de circonstances malheureuses indépendantes de ma volonté, je travaille sur du code qui est compilé en utilisant l'ancien compilateur MSVC++ 4.1. Je reçois les erreurs suivantes quand j'inclure le mot clé explicite:
intMyReference.h (49): erreur C2501: 'explicite': manque décl-spécificateurs
MyReference.h (51): erreur C2143: erreur de syntaxe : disparu ';' avant ''
MyReference.h (52): erreur C2238: jeton inattendu (s) précédent ':'
MyReference.h (52): erreur C2059: erreur de syntaxe: 'constante'
Lorsque J'ajoute un #define explicit
ces erreurs disparaissent. C'était un hack de ma part, juste pour que le compilateur ignore le mot-clé. Je suppose que cela signifie que explicite n'est pas supporté par yon olde compilateur. Quelqu'un peut-il confirmer cela et y a-t-il quelqu'un là-bas avec la connaissance d'une solution de contournement pour cela?
Merci Beaucoups, Dennis.
Vous semblez avoir trouvé un solution de contournement! Je ne peux pas confirmer le problème, malheureusement, comme VC++ 4.1 est un peu trop rétro pour moi (je reviens aussi loin que VC++ 6), mais ma suggestion est simplement de tester _MSC_VER et d'appliquer cette définition si nécessaire. –
Le mot-clé 'explicit', lorsqu'il fonctionne, n'empêche pas quelque chose comme' MyReference aRef = NULL; '. Ce qu'il fait est d'empêcher une conversion implicite dans quelque chose comme 'void func (MyReference ref); func (0); ' –
aschepler
Merci acshelper ... Vous êtes sur place bien sûr. Salutations pour votre aide aussi sgolodetz – Dennis