說我有在頭文件中定義就像一個靜態成員:我們可以在構造函數中定義靜態類成員嗎?
static QHash<QString,int> flagColorsMap;
我如何可以定義爲cpp文件構造函數中的HashMap中。如果我做到以下幾點:
Classname::flagColorsMap.insert("xyz",22);
它給編譯錯誤 ::未定義的引用類名:: flagColorMap。
說我有在頭文件中定義就像一個靜態成員:我們可以在構造函數中定義靜態類成員嗎?
static QHash<QString,int> flagColorsMap;
我如何可以定義爲cpp文件構造函數中的HashMap中。如果我做到以下幾點:
Classname::flagColorsMap.insert("xyz",22);
它給編譯錯誤 ::未定義的引用類名:: 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;
}
它還沒有窩RK?
我想你有這個編譯錯誤,因爲你只是「delcare」flagColorsMap而不是「定義」它。 因此,在.cpp文件中定義flagColorsMap可能會導致此錯誤消失。
你初始化了'flagColorsMap'嗎? – pSoLT
這是一個鏈接器錯誤。嘗試添加'QHash Classname :: flagColorsMap'來定義靜態成員,在一個且只有一個源文件中具有可見性(例如,包括)類定義。 –
Peter
你爲什麼使用班級資格證書? – Rama