Réponses
Trop de publicités?Le problème n'est pas que vous ne pouvez pas transmettre la déclaration d'une classe template. Oui, vous avez besoin de connaître tous les paramètres du modèle et leurs valeurs par défaut pour être en mesure de déclarer correctement:
namespace std {
template<class T, class Allocator = std::allocator<T>>
class list;
}
Mais pour faire de même une déclaration anticipée en namespace std
est explicitement interdite par la norme: la seule chose que vous êtes autorisé à mettre en std
est un modèle de spécialisation, communément std::less
sur un type défini par l'utilisateur. Quelqu'un d'autre peut citer le texte si nécessaire.
Juste #include <list>
et ne vous inquiétez pas à ce sujet.
Oh, d'ailleurs, n'importe quel nom contenant double soulignement est réservé pour une utilisation par la mise en œuvre, de sorte que vous devriez utiliser quelque chose comme TEST_H
au lieu de __TEST__
. Il ne va pas générer un avertissement ou une erreur, mais si votre programme a un clash avec une mise en œuvre de l'identifiant défini, alors il n'est pas garanti pour compiler ou exécuter correctement: c'est mal formé. Également interdits sont les noms qui commencent par un caractère de soulignement suivi d'une lettre majuscule, entre autres. En général, ne pas démarrer les choses avec des traits de soulignement, sauf si vous savez ce qu'est la magie que vous faites affaire avec.
J’ai résolu ce problème.
J’étais en œuvre une couche du modèle OSI (fenêtre de curseur, niveau 2) pour une simulation de réseau en C++ (Juno Eclipse). J’ai eu des cadres (modèle `` ) et de ses États (modèle d’État, déclaration anticipée).
La solution est la suivante :
Dans le `` fichier, vous devez inclure le fichier d’en-tête que vous transférez, c'est-à-dire
La RPC :
Et... une autre classe.