假设我在头文件中定义了一个静态成员,如下所示:
static QHash<QString,int> flagColorsMap;
如何在 cpp 文件中的构造函数中定义哈希映射。如果我执行以下操作:
Classname::flagColorsMap.insert("xyz",22);
它给出了编译错误 :: 未定义的对 Classname::flagColorMap 的引用。
在.cpp文件中放下这一行:
QHash<QString,int> Classname::flagColorsMap;
编辑:请检查这个非常简单的静态QHash成员初始化示例:创建新的Qt Quick项目并编辑MainWindow类:
// mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
static QHash<QString,int> flagColorsMap;
};
#endif // MAINWINDOW_H
和源文件:
// mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
QHash<QString,int> MainWindow::flagColorsMap;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
MainWindow::flagColorsMap.insert("xyz",22);
}
MainWindow::~MainWindow()
{
qDebug() << "Value=" << flagColorsMap.value("xyz");
delete ui;
}
还是不行吗?
我认为你得到了这个编译错误,因为你只是"delcare"flagColorsMap,而不是"定义"它。因此,在.cpp文件中定义flagColorsMap,也许此错误将消失。