假设我在头文件中定义了一个静态成员,如:
static QHash<QString,int> flagColorsMap;
如何在cpp文件中的构造函数内定义hashmap。如果我执行以下操作:
Classname::flagColorsMap.insert("xyz",22);
它给出了编译错误 ::对Classname :: flagColorMap的未定义引用。
答案 0 :(得分:2)
在.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;
}
它仍然不起作用吗?
答案 1 :(得分:0)
我认为你得到了这个编译错误,因为你只是“delcare”flagColorsMap而不是“定义”它。 因此,在.cpp文件中定义flagColorsMap可能此错误将消失。