У меня есть следующий фрагмент кода. Я хочу получить доступ к своему стеку из другого класса. (Этот стек заполнен QWidgets, которые мне нужны в некоторых других классах). Но я даже не дошел до инициализации моей статической переменной в конструкторе главного окна. Сообщение об ошибке: «уточненный идентификатор в объявлении перед ‘=’ токеном»
/*mainwindow.h*/
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0); //Konstruktor
~MainWindow(); //Destruktor
//static QStack<QWidget*> *widgetStack;
//static QStack<QWidget*> getWidgetStack();
static QStack<QWidget*> *widgetStack;private:
Ui::MainWindow *ui;
/*mainwindow.cpp*/
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent), ui(new Ui::MainWindow)
{
/*ui->setupUi(this);
QStack<QWidget*> *MainWindow::widgetStack = new QStack<QWidget*>();
}
/*A method in another class*/
void Support::on_Taster_Power_clicked()
{
MainWindow.widgetStack->pop();
}
Я очень старался, но у меня ничего не получалось. пожалуйста помоги. заранее спасибо
/*mainwindow.cpp*/
QStack<QWidget*> *MainWindow::widgetStack = new QStack<QWidget*>();
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent), ui(new Ui::MainWindow)
{
/*ui->setupUi(this); */
}
Порядок инициализации нелокальных статических объектов
определено в разных единицах перевода не указано стандартом.
Это подвержено ошибкам …
Статические объекты внутри функций известны как локальные статические объекты.
(потому что они локальны для функции), и другие виды статических
объекты известны как нелокальные статические объекты.
Я настоятельно рекомендую вам использовать этот способ:
static const QStack<QWidget*>& getWidgetStack() {
static QStack<QWidget*> widgetStack = QStack<QWidget*>();
return widgetStack;
}
static QStack<QWidget*>* getMutableWidgetStack() {
const_cast<QStack<QWidget*>*>(&getWidgetStack());
}