我有以下代码段。我想从另一个类访问我的堆栈。 (这个堆栈充满了我在其他一些类中需要的QWidgets)。但我甚至没有在mainwindow构造函数中初始化我的静态变量。错误信息是:" ='之前的声明中的" qualified-id令牌"
/*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();
}
我尝试了很多,但对我来说没什么用。请帮忙。提前谢谢
答案 0 :(得分:1)
/*mainwindow.cpp*/
QStack<QWidget*> *MainWindow::widgetStack = new QStack<QWidget*>();
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent), ui(new Ui::MainWindow)
{
/*ui->setupUi(this); */
}
答案 1 :(得分:0)
非本地静态对象的初始化顺序 标准未规定以不同的翻译单位定义。 这很容易出错......
函数内部的静态对象称为本地静态对象 (因为它们是函数的本地),以及其他类型的静态 对象称为非本地静态对象。
我强烈建议您使用这种方式:
static const QStack<QWidget*>& getWidgetStack() {
static QStack<QWidget*> widgetStack = QStack<QWidget*>();
return widgetStack;
}
static QStack<QWidget*>* getMutableWidgetStack() {
const_cast<QStack<QWidget*>*>(&getWidgetStack());
}