如何在 C++ 中初始化静态指针?
how can i initialize a static pointer in c++?
我有以下代码片段。我想从另一个 class 访问我的堆栈。 (这个堆栈充满了我在其他一些 classes 中需要的 QWidgets)。但是我什至没有在我的主窗口构造函数中初始化我的静态变量。错误信息是:"qualified-id in declaration before '=' token"
/*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());
}
我有以下代码片段。我想从另一个 class 访问我的堆栈。 (这个堆栈充满了我在其他一些 classes 中需要的 QWidgets)。但是我什至没有在我的主窗口构造函数中初始化我的静态变量。错误信息是:"qualified-id in declaration before '=' token"
/*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());
}