La classe 'n'est pas un type de modèle'
Que fait cette erreur signifie?
Generic.h:25: error: 'Generic' is not a template type
Ici est Générique.
template <class T>
class Generic: public QObject, public CFG, public virtual Evaluator {
Q_OBJECT
std::string key_;
std::vector<std::string> layouts_;
std::vector<std::string> static_widgets_;
std::map<std::string, std::vector<widget_template> > widget_templates_;
std::map<std::string, Widget *> widgets_;
int type_;
LCDWrapper *wrapper_;
protected:
LCDText *lcdText_;
public:
Generic(Json::Value *config, int type);
~Generic();
void CFGSetup(std::string key);
void BuildLayouts();
void StartLayout();
int GetType() { return type_; }
//T *GetLCD() { return lcd_; }
LCDText *GetLCDText() { return lcdText_; }
virtual void Connect(){};
virtual void SetupDevice(){};
std::map<std::string, Widget *> Widgets();
std::string CFG_Key();
LCDWrapper *GetWrapper() { return wrapper_; }
};
Est le problème qu'il sous-classes autres classes? J'ai essayé une expérience d'essai de cette théorie, mais il n'a pas de produire cette erreur.
Edit: Ok, donc un couple de vous les gars l'a souligné, je pourrais être en avant de déclarer Générique ailleurs sans en faire un modèle de classe. C'est vrai. Et lorsque je fais un modèle, je reçois un autre message d'erreur.
De la propriété.h:15: erreur: ISO C++ forbids declaration of 'Générique' avec aucun type de
template <class T>
class Generic;
class Property : public CFG {
Generic *visitor; //line 15
bool is_valid;
QScriptValue result;
Json::Value *expression;
public:
Property(const Property &prop);
Property(Generic *v, Json::Value *section, std::string name, Json::Value *defval);
~Property();
bool Valid();
int Eval();
double P2N();
int P2INT();
std::string P2S();
void SetValue(Json::Value val);
Property operator=(Property prop);
};
source d'informationauteur Scott
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas sûr si ce est votre problème, mais vous ne peut pas sous-classe QObject avec une classe de modèle.
Voici plus d'informations à ce sujet.
Prendre un coup d'oeil à cette question similaire ailleurs sur. Êtes-vous, par hasard, de l'avant-déclarant Générique quelque part, et non pas basé sur un modèle de classe?
EDIT:
En réponse à votre deuxième erreur...
@Steve Guidi a résolu ce problème dans son commentaire ailleurs sur cette page. Maintenant que vous avez systématiquement déclaré Génériques que basé sur un modèle de classe, la ligne 15 de votre Propriété.h est illégal parce que vous êtes à l'utilisation de Générique dans un untemplated forme.
Vous devez spécifier la spécialisation que vous utilisez sur la ligne 15, par exemple
peut-être que le Générique est déjà défini quelque part d'autre?
Votre problème est que vous êtes la définition des visiteurs de type Générique avec pas de modèle param.
Lorsque vous transférez déclaré à la classe Générique puis à la ligne 15, le compilateur de la déclaration. Mais lorsque vous avez modifié la déclaration avec le modèle de la classe Générique ne trouve plus.
Donc, vous devriez faire quelque chose comme:
ou
ou quelque chose comme ça.
Vérifier pour voir si le
#include
directive immédiatement au-dessus deGeneric
a une fermeture;
sur sa définition de classe. J'ai vu que l'erreur une fois, et qui en était la cause.Est que l'erreur générée par le compilateur C++, ou par Qt MOC? Il pourrait être que vous ne pouvez pas appliquer Qt MOC sur une classe de modèle.
À côté de la question que vous n'êtes pas à la définition de la classe de modèle correctement (donc votre message d'erreur), vous ne pouvez pas utiliser une macro q_object dans une classe de modèle.
Voir http://doc.trolltech.com/qq/qq15-academic.html pour plus de détails.