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:请看我编辑的答案。