c++ - 在 C++ 类中初始化静态数据成员(类)

标签 c++ class static initialization redefinition

我试图在父类中声明一个静态类并对其进行初始化,但我似乎遇到了各种错误。

/* MainWindow.h */
    class MainWindow
    {
        private:
        static DWORD WINAPI threadproc(void* param);
        static MainWindow *hWin;
    };
/* MainWindow.cpp */
#include "MainWindow.h"
      void MainWindow::on_pushButton_clicked()
        {
            HANDLE hThread = CreateThread(NULL, NULL, threadproc, (void*) this, NULL, NULL);
            WaitForSingleObject(hThread, INFINITE);
            CloseHandle(hThread);
        }

        DWORD WINAPI MainWindow::threadproc(void* param)
        {
            hWin = (MainWindow*) param;
            //Be able to access stuff like hWin->run();
            return 0;
        }

我尝试使用 MainWindow::hWin = (MainWindow*) param;MainWindow::hWin = new MainWindow((MainWindow*) param)); 和许多其他人,但似乎都没有用。这样做的正确方法是什么?关于这个主题,有没有人可以推荐任何资源,我已经为 class 问题纠结了几天,非常沮丧。

最佳答案

静态成员总是由声明定义 组成,您的cpp 文件中缺少定义。将以下行放在任何函数之外:

MainWindow* MainWindow::hWin;

您可以阅读更多 herehere .

关于c++ - 在 C++ 类中初始化静态数据成员(类),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9413218/

相关文章:

c++ - 您能否/如何重新分配使用 placement new 创建的 C++ 对象?

c++ - For vs While 用于查找链表中的最后一项

C++ 类或结构与 C 结构的兼容性

class - 在构造函数中调用静态方法——CoffeeScript

c++ - 我应该在我的类中的 std::vector 成员变量中使用 std::unique_ptr<T> 吗?

c++ - 结构是公共(public)的,而类可以是公共(public)的和私有(private)的

c# - 在 C# 中将一组成员标记为私有(private)/公共(public)

java - 类需要一个 main 方法吗?

c++ - GCC 中的 __attribute__((init_priority(X)))

c++ - 对静态变量的赋值是函数的结果,该函数在内部更改了该静态变量