मैं क्यूटी का उपयोग कर रहा हूं लेकिन यह एक सामान्य सी ++ प्रश्न है। मेरा मामला सरल है, मेरे पास कक्षा 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();
}
जब संकलन मुझे मिल गया:
QCoreAplication :: applicationFilePath: कृपया QAplication ऑब्जेक्ट को पहले
तो समस्या यहां स्पष्ट है। जब QAplication का स्थिर फ़ंक्शन Constants.cpp QAplplication में अभी तक Qt द्वारा स्थापित नहीं किया जाता है। मुझे QApplication a(argc, argv);
लाइन तक किसी भी तरह इंतजार करने की ज़रूरत है, मुख्य.cpp
यह संभव है और यदि आप इसे दूर करने के लिए और क्या सुझाव नहीं दे सकते हैं?
धन्यवाद
इसे निरंतर घोषित नहीं किया जा रहा है? यह निश्चित रूप से स्थिर नहीं है क्योंकि यह एप्लिकेशन स्टार्टअप पर कुछ राज्यों पर निर्भर करता है। – m0skit0
लेकिन इसे केवल एक बार असाइन किए जाने के बाद इसे पढ़ने की आवश्यकता है? – destan
मैं गलत हो सकता था, लेकिन 'QAplication :: applicationFilePath()। ToStdString()' मेरे लिए एक अस्थायी लग रहा है, इस स्थिति में आप अमान्य डेटा के लिए एक सूचक को संग्रहीत कर रहे हैं। –