Używam Qt, ale jest to ogólne pytanie w C++. Mój przypadek jest prosty, mam klasę Constants
, która ma stały element statyczny, który chcę zainicjować po wykonaniu pewnych wywołań funkcji.C++ czy możliwe jest opóźnienie inicjalizacji stałego elementu statycznego?
Constants.h
#ifndef CONSTANTS_H
#define CONSTANTS_H
class Constants
{
public:
static const char* const FILE_NAME;
};
#endif // CONSTANTS_H
Constants.cpp
#include "constants.h"
#include <QApplication>
const char* const Constants::FILE_NAME = QApplication::applicationFilePath().toStdString().c_str();
main.cpp
#include <QtGui/QApplication>
#include "mainwindow.h"
#include "constants.h"
#include <QDebug>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
qDebug()<< "name: "<<Constants::FILE_NAME;
//for those who are unfamiliar with Qt, qDebug just prints out
return a.exec();
}
Podczas kompilacji mam:
QCoreApplication :: applicationFilePath: Najpierw wykonaj instancję obiektu QApplication:
Problem jest oczywisty. Kiedy funkcja statyczna QApplication jest wywoływana w Constants.cpp QApplication nie jest jeszcze instalowany przez Qt. Muszę jakoś poczekać, aż linia QApplication a(argc, argv);
zostanie przekazana w main.cpp
czy jest to możliwe, a jeśli nie, to co jeszcze można by przezwyciężyć?
dzięki
Brak deklaracji jako stała? To zdecydowanie nie jest stała, ponieważ opiera się na pewnym stanie przy uruchamianiu aplikacji. – m0skit0
, ale muszę go odczytać tylko po przypisaniu? – destan
Mogę się mylić, ale 'QApplication :: applicationFilePath(). ToStdString()' wygląda jak tymczasowy dla mnie, w takim przypadku przechowujesz wskaźnik do nieprawidłowych danych. –