鏈接我的程序會產生一堆如下所示的錯誤。模板類和它們的方法
/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()'
這是否意味着我必須爲每個模板參數使用通用::方法名(和通用::方法名)?我希望不是。我的印象是模板應該避免這種情況。
編輯:這裏是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
好吧,應該是在通用後面的LCDText和LCDGraphic,在最後一段中被shift-和shift-包圍。 – Scott 2009-10-19 22:48:09
這裏是從前面的相關問題... http://stackoverflow.com/questions/1590688/class-is-not-a-template-type – razlebe 2009-10-19 22:50:56
謝謝sgreeve。我幾乎編輯了這個問題,但認爲這個問題太無關緊要了。 – Scott 2009-10-19 22:52:22