如何在c ++中初始化静态指针?

时间:2015-10-15 12:58:52

标签: c++ pointers static initializing

我有以下代码段。我想从另一个类访问我的堆栈。 (这个堆栈充满了我在其他一些类中需要的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();
}

我尝试了很多,但对我来说没什么用。请帮忙。提前谢谢

2 个答案:

答案 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());
}