我对Qt框架很新。我尝试编写一个包含2D数组的类,该数组的数据应该显示在主窗口中(例如,使用QTableWidget)。该课程有以下声明:
// gridgame.h
template <int gsize_r,int gsize_c>
class GridGame : public QObject
{
Q_OBJECT
private:
char field[gsize_r][gsize_c];
public:
GridGame();
void setupConnect(QMainWindow & win);
signals:
void onPrintStatus(char[gsize_r][gsize_c]);
};
该类的定义当然在cpp文件中给出如下:
//gridgame.cpp
#include "gridgame.h"
template <int gsize_r,int gsize_c>
GridGame<gsize_r,gsize_c>::GridGame()
{
int i,j;
for (i=0;i<gsize_r;++i)
for (j=0;j<gsize_c;++j)
field[i][j] = '-';
}
template <int gsize_r,int gsize_c>
void GridGame<gsize_r,gsize_c>::setupConnect(QMainWindow &win)
{
connect(this,SIGNAL(onPrintStatus()),&win,SLOT(onRefresh()));
}
template <int gsize_r,int gsize_c>
void GridGame<gsize_r,gsize_c>::onPrintStatus(char[gsize_r][gsize_c]){
emit field;
}
该类在main中使用如下:
#include <QtCore>
#include <QApplication>
#include <QObject>
#include "mainwindow.h"
#include "gridgame.cpp"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
const int sizer = 5, sizec = 5;
GridGame<sizer,sizec> gg;
w.show();
gg.printStatus();
return a.exec();
}
问题:代码似乎编译正常,但即使我没有调用该类的任何函数(只是声明一个变量),我也会收到链接器错误。
-1: error: undefined reference to `GridGame<5, 5>::metaObject() const'
-1: error: undefined reference to `GridGame<5, 5>::qt_metacast(char const*)'
-1: error: undefined reference to `GridGame<5, 5>::qt_metacall(QMetaObject::Call, int, void**)'
-1: error: error: ld returned 1 exit status
可能是什么问题?我正在使用Qt Creator 3.6.1和Qt库5.6.0。
提前感谢您的帮助。