Lier mon programme génère un tas d'erreurs comme ci-dessous.Classes de modèles et leurs méthodes
/home/starlon/Projects/LCDControl/DrvQt.cpp:8: undefined reference to `Generic<LCDText>::Generic(Json::Value*, int)'
/home/starlon/Projects/LCDControl/DrvQt.cpp:18: undefined reference to `Generic<LCDText>::~Generic()'
/home/starlon/Projects/LCDControl/DrvQt.cpp:8: undefined reference to `Generic<LCDText>::Generic(Json::Value*, int)'
/home/starlon/Projects/LCDControl/DrvQt.cpp:18: undefined reference to `Generic<LCDText>::~Generic()'
DrvQt.o: In function `~DrvQt':
/home/starlon/Projects/LCDControl/DrvQt.cpp:23: undefined reference to `Generic<LCDText>::~Generic()'
/home/starlon/Projects/LCDControl/DrvQt.cpp:23: undefined reference to `Generic<LCDText>::~Generic()'
/home/starlon/Projects/LCDControl/DrvQt.cpp:23: undefined reference to `Generic<LCDText>::~Generic()'
/home/starlon/Projects/LCDControl/DrvQt.cpp:23: undefined reference to `Generic<LCDText>::~Generic()'
DrvQt.o:(.rodata._ZTV5DrvQt[vtable for DrvQt]+0xc): undefined reference to `Generic<LCDText>::CFG_Key()'
DrvQt.o:(.rodata._ZTC5DrvQt0_7GenericI7LCDTextE[vtable for DrvQt]+0xc): undefined reference to `Generic<LCDText>::CFG_Key()'
Est-ce que cela signifie que je dois avoir un générique :: MethodName (et générique :: MethodName) pour chaque paramètre modèle que je vais utiliser? J'espère que non. J'avais l'impression que les gabarits étaient censés éviter ce genre de scénario.
Edit: Voici DrvQt.cpp
#include <iostream>
#include <QMainWindow>
#include "LCDControl.h"
#include "DrvQt.h"
DrvQt::DrvQt(LCDControl *visitor, Json::Value *config, int rows, int cols) :
Generic<LCDText>(config, LCD_TEXT) { // line 8
display_ = new QtDisplay((Generic<LCDText> *)this,
config, rows, cols, 8, 6);
lcd_ = (LCDText *)display_;
std::cout << "DrvQt" << std::endl;
visitor_ = visitor;
std::cout << "Eval: " << Eval("uptime.Uptime('%H')").toString().toStdString() << std::endl;
std::cout << "Eval: " << Eval("cpuinfo.Cpuinfo('model name')").toString().toStdString() << std::endl;
std::cout << "Eval: " << Eval("foo").toString().toStdString() << std::endl;
std::cout << "Eval: " << Eval("name").toString().toStdString() << std::endl;
} // line 18
DrvQt::~DrvQt() {
delete display_;
//delete window;
} // line 23
Eh bien, il est supposé être LCDText et LCDGraphic après Generic, entouré par shift-, et shift-., Dans ce dernier paragraphe. – Scott
Voici la question connexe de plus tôt ... http://stackoverflow.com/questions/1590688/class-is-not-a-template-type – razlebe
Merci sgreeve. J'ai presque édité cette question, mais j'ai pensé que celui-ci était trop indépendant. – Scott