1

次のコード スニペットがあります。別のクラスからスタックにアクセスしたい。(このスタックは、他のクラスで必要な QWidget で満たされています)。しかし、メインウィンドウのコンストラクターで静的変数を初期化することさえできませんでした。エラーメッセージは次のとおりです。「「=」トークンの前の宣言に修飾された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();
}

私は本当にたくさん試しましたが、何もうまくいきませんでした。助けてください。前もって感謝します

4

2 に答える 2

1
/*mainwindow.cpp*/

QStack<QWidget*> *MainWindow::widgetStack = new QStack<QWidget*>();

MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent), ui(new Ui::MainWindow)
{
    /*ui->setupUi(this); */
}
于 2015-10-15T13:01:48.950 に答える
0

異なる翻訳単位で定義された非ローカル静的オブジェクトの初期化の順序は、標準では指定されていません。これはエラーが発生しやすい...

関数内の静的オブジェクトはローカル静的オブジェクトと呼ばれ (関数に対してローカルであるため)、その他の種類の静的オブジェクトは非ローカル静的オブジェクトと呼ばれます。

次の方法で使用することを強くお勧めします。

static const QStack<QWidget*>& getWidgetStack() {
  static QStack<QWidget*> widgetStack = QStack<QWidget*>();
  return widgetStack;
}

static QStack<QWidget*>* getMutableWidgetStack() {
  const_cast<QStack<QWidget*>*>(&getWidgetStack());
}
于 2015-10-15T13:26:04.527 に答える