Qt5

时间:2016-07-23 19:06:02

标签: c++ qt class linker

在我的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)

在这种情况下我该怎么办才能让它发挥作用?

1 个答案:

答案 0 :(得分:1)

您对静态类成员的使用不完整。 看看标题中的这一行:

static MainWindow mainwindowInstance;

所有这一切都是声明 mainwindowInstance。你需要定义它(实例化它)。您可以在mainwindow.cpp

中执行此操作
MainWindow MainWindow::mainwindowInstance;

请注意,您无法在头文件中执行此操作,因为最终会出现多个实例。

我建议使用完全不同的设计:通过类中的指针存储实例,为实例设置一个setter并在main()中创建它,这样你也可以在main()中删除它