2017-01-19 99 views
0

說我有在頭文件中定義就像一個靜態成員:我們可以在構造函數中定義靜態類成員嗎?

static QHash<QString,int> flagColorsMap; 

我如何可以定義爲cpp文件構造函數中的HashMap中。如果我做到以下幾點:

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

它給編譯錯誤 ::未定義的引用類名:: flagColorMap。

+2

你初始化了'flagColorsMap'嗎? – pSoLT

+1

這是一個鏈接器錯誤。嘗試添加'QHash Classname :: flagColorsMap'來定義靜態成員,在一個且只有一個源文件中具有可見性(例如,包括)類定義。 – Peter

+0

你爲什麼使用班級資格證書? – Rama

回答

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; 
} 

它還沒有窩RK?

+0

這不起作用。 –

+0

你能提供一些更大的代碼嗎?這種初始化適用於我。 – trivelt

+0

你還沒有做過任何初始化。 –

0

我想你有這個編譯錯誤,因爲你只是「delcare」flagColorsMap而不是「定義」它。 因此,在.cpp文件中定義flagColorsMap可能會導致此錯誤消失。

相關問題