Я использую Qt, но это общий вопрос C ++. Мой случай прост, у меня есть класс Constants
, который имеет постоянный статический член, который я хочу инициализировать после выполнения определенных вызовов функций.
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();
}
При компиляции я получил:
QCoreApplication :: applicationFilePath: Сначала создайте экземпляр объекта QApplication
Так что проблема здесь очевидна. Когда статическая функция QApplication вызывается в Constants.cpp, QApplication еще не установлен Qt. Мне нужно как-то подождать, пока строка QApplication a(argc, argv);
не будет передана в main.cpp
возможно ли это, а если нет, что еще вы могли бы предложить, чтобы преодолеть это?
спасибо