Hallo, ich versuche, eine Vorlage-Klasse in Qt zu schreiben, dabei tun, ich wurde mit einigen Fehlern stecken, habe ich einige Artikel lesen und fing an, ein Beispiel nach meiner AnforderungWie lösen Vorlage Problem in Qt
zu bauentemplate.h
#ifndef CSLCDTEMPLATE_H
#define CSLCDTEMPLATE_H
#include <QDialog>
#include <QTimer>
#include <QDebug>
#include <QList>
#include <QPixmap>
#include <QPalette>
#include <QStringList>
template<class T>
class LcdTemplate : public QDialog
{
public:
LcdTemplate();
void display(T);
T Getalue();
private slots:
void display();
private:
int indexVal;
T m_Obj;
QStringList nameList;
};
#endif
// CSLCDTEMPLATE_H
Template.cpp
#include "CSLcdTemplate.h"
extern QStringList display_list;
template <class T>
LcdTemplate<T>::LcdTemplate()
{
qDebug()<<"Inside the Constructor of LCD Template";
setWindowFlags(Qt::FramelessWindowHint);
#ifdef GL11_QT
setGeometry(0,0,320,240);
#endif
#ifdef GL11_GNOME
setGeometry(2,20,316,200);
#endif
setStyleSheet("background-color:yellow");
indexVal = 0;
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(display()));
timer->start(500);
QTimer::singleShot(4000, this, SLOT(close()));
}
//template <class T>
void LcdTemplate::display()
{
nameList = display_list;
qDebug()<<"Data in"<<nameList;
display(nameList);
}
template <class T>
void LcdTemplate<T>::display(T list)
{
switch(indexVal)
{
case 0:
this->setStyleSheet(nameList.at(indexVal));
indexVal = 1;
break;
case 1:
this->setStyleSheet(nameList.at(indexVal));
indexVal = 2;
break;
case 2:
this->setStyleSheet(nameList.at(indexVal));
indexVal = 3;
break;
case 4:
this->setStyleSheet(nameList.at(indexVal));
indexVal = 4;
break;
case 5:
this->setStyleSheet(nameList.at(indexVal));
indexVal = 0;
break;
}
}
template <class T>
T TestTemp<T>::Getalue()
{
return m_Obj;
}
Die Fehler i bin vor sind
CSLcdTemplate.cpp:29:6: error: 'template<class T> class LcdTemplate' used without template parameters
CSLcdTemplate.cpp: In function 'void display()':
CSLcdTemplate.cpp:32:5: error: 'nameList' was not declared in this scope
CSLcdTemplate.cpp: At global scope:
CSLcdTemplate.cpp:67:11: error: expected initializer before '<' token
Wie kann ich diese Fehler beheben.
Template-Implementierung in einer cpp-Datei ??? Sehen Sie sich [hier] an (https://isocpp.org/wiki/faq/templates#templates-defn-vs-decl). Dennoch gibt es einige begrenzte Fälle, in denen Sie dies noch tun können, aber im Allgemeinen werden Sie scheitern. – Aconcagua