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

Can we define static class member inside constructor?

本文关键字:静态类 成员 定义 构造函数 我们      更新时间:2023-10-16

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

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,也许此错误将消失。