Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我们可以在构造函数中定义静态类成员吗?_C++_Qt_Static_Hashmap - Fatal编程技术网

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

C++ 我们可以在构造函数中定义静态类成员吗?,c++,qt,static,hashmap,C++,Qt,Static,Hashmap,假设我在头文件中定义了一个静态成员,如: static QHash<QString,int> flagColorsMap; 它给出了编译错误::未定义对Classname::flagColorMap的引用。我认为您得到了这个编译错误,因为您只是“delcare”flagColorsMap,而不是“定义”它。 因此,在.cpp文件中定义flagColorsMap可能此错误将消失。我认为您得到此编译错误,因为您只是“delcare”flagColorsMap,而不是“定义”它。 因此,

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

static QHash<QString,int> flagColorsMap;

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

我认为您得到了这个编译错误,因为您只是“delcare”flagColorsMap,而不是“定义”它。
因此,在.cpp文件中定义flagColorsMap可能此错误将消失。

我认为您得到此编译错误,因为您只是“delcare”flagColorsMap,而不是“定义”它。
因此,在.cpp文件中定义flagColorsMap可能此错误将消失。

在.cpp文件中放置以下行:

QHash<QString,int> Classname::flagColorsMap;
QHash类名::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.h
#ifndef主窗口
#定义主窗口
#包括
名称空间用户界面{
类主窗口;
}
类主窗口:公共QMainWindow
{
Q_对象
公众:
显式主窗口(QWidget*parent=0);
~main窗口();
私人:
Ui::MainWindow*Ui;
静态QHash flagColorsMap;
};
#endif//main窗口
和源文件:

// 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;
}
//mainwindow.cpp
#包括“mainwindow.h”
#包括“ui_main window.h”
#包括
QHash主窗口::flagColorsMap;
主窗口::主窗口(QWidget*父窗口):
QMainWindow(父级),
用户界面(新用户界面::主窗口)
{
主窗口::flagColorsMap.insert(“xyz”,22);
}
MainWindow::~MainWindow()
{

qDebug()在.cpp文件中放入以下行:

QHash<QString,int> Classname::flagColorsMap;
QHash类名::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.h
#ifndef主窗口
#定义主窗口
#包括
名称空间用户界面{
类主窗口;
}
类主窗口:公共QMainWindow
{
Q_对象
公众:
显式主窗口(QWidget*parent=0);
~main窗口();
私人:
Ui::MainWindow*Ui;
静态QHash flagColorsMap;
};
#endif//main窗口
和源文件:

// 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;
}
//mainwindow.cpp
#包括“mainwindow.h”
#包括“ui_main window.h”
#包括
QHash主窗口::flagColorsMap;
主窗口::主窗口(QWidget*父窗口):
QMainWindow(父级),
用户界面(新用户界面::主窗口)
{
主窗口::flagColorsMap.insert(“xyz”,22);
}
MainWindow::~MainWindow()
{


qDebug()是否初始化了
flagColorsMap
?这是链接器错误。请尝试在一个且仅有一个具有可见性(例如,includes)的源文件中添加
QHash Classname::flagColorsMap
以定义静态成员类定义。你为什么使用类限定符?然后你以某种方式误解或错误地应用了我的建议。你随后接受的答案的实质内容(在编辑后,因为你也说它“不起作用”)是相同的建议,编辑只是一个例子。@Peter我完全同意你的观点。我收回我以前的陈述。你初始化了
flagColorsMap
?这是链接器错误。尝试添加
QHash Classname::flagColorsMap
,在一个且只有一个源文件中定义静态成员,该源文件具有(例如,包括)班级定义。你为什么使用班级限定符?然后你不知何故误解或错误地应用了我的建议。你随后接受的答案的实质内容(在编辑后,因为你也说它“不起作用”)是同样的建议,编辑只是一个例子。@Peter我完全同意你的观点。我收回我以前的陈述。这不起作用。你能提供你的代码的更大部分吗?这样的初始化对我来说很有效。你没有做任何初始化。我现在做的是QHash Classname::flagColorsMap.insert(“xyz”,22);@Sumeet Singh:请看我编辑的答案。这不起作用。你能提供更大的部分代码吗?这样的初始化对我来说很有效。你没有做任何初始化。我正在做的是QHash Classname::flagColorsMap.insert(“xyz”,22);@Sumeet Singh:请看我编辑的答案。