链接时Qt框架的未经引用的引用

时间:2016-05-04 18:36:59

标签: qt

我对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。

提前感谢您的帮助。

0 个答案:

没有答案