2017-01-19 3 views
0

Скажем, у меня есть статический член, определенный в заголовочном файле как:Можем ли мы определить статический член класса внутри конструктора?

static QHash<QString,int> flagColorsMap; 

Как я могу определить HashMap внутри конструктора, который находится в файле CPP. Если бы я сделать следующее:

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

дает ошибку компиляции :: неопределенную ссылку на Classname :: 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; 
} 

Является ли он по-прежнему не wo гк?

+0

Это не работает. –

+0

Не могли бы вы предоставить большую часть кода? Такая инициализация работает для меня. – trivelt

+0

У вас нет инициализации. –

0

Я думаю, что вы получили эту ошибку компиляции, потому что вы просто «delcare» flagColorsMap, но не «определяете» ее. Так что определите flagColorsMap в файле .cpp, возможно, эта ошибка исчезнет.

Смежные вопросы