La syntaxe pour le constructeur dans la classe de modèle
Je suis en train de créer un générique tampon circulaire modèle mais il y a une erreur de syntaxe que je ne comprends pas. L'erreur est dans mon constructeur, mais il semble que j'ai paramétré le destructeur de la même façon et que l'on travaille. J'ai suivi l'exemple de Stroustrup C++, et il utilise un paramètre avant l'opérateur de résolution de portée et aussi dans le nom de la fonction, ainsi que je l'ai. Je suis également certain il n'y a pas de dépendances circulaires, parce que je ne suis qu'à la compilation d'un fichier. Aussi la mise en œuvre et les déclarations sont dans le même fichier (CircBuf.h) et il n'y a pas de correspondant .fichier cpp, le lien ne devrait pas être un problème non plus. J'ai essayé d'ajouter le mot clé "inline" comme par cette solution et j'obtiens la même erreur.
/* CircBuf.h */
template<typename T> class CircBuf {
//don't use default ctor
CircBuf();
int size;
T *data;
public:
CircBuf(int);
~CircBuf();
};
template<typename T> CircBuff<T>::CircBuf<T>(int i) {
data = new T[i];
}
template<typename T> CircBuf<T>::~CircBuf<T>() {
delete data;
}
makefile
all:
g++ -g -pedantic CircBuf.h -o prog
compilateur-erreur
CircBuf.h:13:22: error: ‘CircBuff’ does not name a type
CircBuff
plutôt que CircBuf
dans une instance. C'est ce que le compilateur essaie de vous dire.OriginalL'auteur xst | 2012-06-07
Vous devez vous connecter pour publier un commentaire.
CircBuff
n'est certainement pas le nom d'un type, le nom du type de destinée estCircBuf
avec un seulf
.Noter que vous avez aussi besoin de perdre la fuite
<T>
à la fois constructeur et un destructeur.CircBuf.h:15:22: erreur: ‘CircBuf<T>::CircBuf nom du constructeur, pas le type CircBuf.h:15:22: erreur: et "CircBuf<T>" n'a pas de modèle constructeurs
j'ai enlevé le paramètre le nom de la fonction comme ceci et ça fonctionne: template<typename T> CircBuf<T>::CircBuf(int i)
les paramètres du constructeur de nom sont utilisés lorsque le constructeur est un modèle.
c'est un habitué de constructeur d'une classe de modèle
template<typename T> CircBuf<T>::CircBuf(int i)
; et c'est un modèle de constructeur d'une classe de modèletemplate<typename T> template<typename U> CircBuf<T>::CircBuf<U>(U i)
.OriginalL'auteur K-ballo