我们可以在构造函数中定义静态类成员吗?

时间:2017-01-19 11:18:03

标签: c++ qt static hashmap

假设我在头文件中定义了一个静态成员,如:

static QHash<QString,int> flagColorsMap;

如何在cpp文件中的构造函数内定义hashmap。如果我执行以下操作:

Classname::flagColorsMap.insert("xyz",22);

它给出了编译错误 ::对Classname :: flagColorMap的未定义引用。

2 个答案:

答案 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可能此错误将消失。