在我的Qt5.7计划中,我尝试从this帖子(@ vz0回答)实施解决方案。 我想从Settings类访问我的MainWindow类函数,但我收到链接器错误。请告诉我,我做错了什么?
片段:
主:
MainWindow w; //MainWindow declaration
a.setActivationWindow(&w);
w.setWindowFlags(Qt::MSWindowsFixedSizeDialogHint);
mainwindow.h:
public:
static MainWindow* getInstance() { return &mainwindowInstance; }
void trayReload();
void tray();
private:
static MainWindow mainwindowInstance;
mainwindow.cpp:
void MainWindow::trayReload()
{
delete trayIcon;
MainWindow::tray();
}
settings.cpp:
void Settings::bar()
{
MainWindow* mainWin = MainWindow::getInstance();
mainWin->trayReload(); //I want to make this working
}
编译此代码后,我收到此错误:
settings.obj:-1:错误:LNK2001:未解析的外部符号"私有:静态类MainWindow MainWindow :: mainwindowInstance" (?mainwindowInstance @ @@ MainWindow的0V1 @ A)
在这种情况下我该怎么办才能让它发挥作用?
答案 0 :(得分:1)
您对静态类成员的使用不完整。 看看标题中的这一行:
static MainWindow mainwindowInstance;
所有这一切都是声明 mainwindowInstance
。你需要定义它(实例化它)。您可以在mainwindow.cpp
:
MainWindow MainWindow::mainwindowInstance;
请注意,您无法在头文件中执行此操作,因为最终会出现多个实例。
我建议使用完全不同的设计:通过类中的指针存储实例,为实例设置一个setter并在main()
中创建它,这样你也可以在main()
中删除它