2017-01-19 67 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可能会导致此错误消失。

相关问题