gpt4 book ai didi

C++ 错误 : invalid use of member 'calls_object::OBJECT' in static member function

转载 作者:行者123 更新时间:2023-11-28 00:48:35 25 4
gpt4 key购买 nike

我从下面的代码中得到以下错误。

错误:在静态成员函数中无效使用成员“calls_object::OBJECT”|错误:从这个位置

来自 OBJECT->call(); 第 29 行。

基本上函数必须是静态的,因为它确实是代码的简化版本这会创建一个 Windows 线程。我似乎无法在静态函数中使用指针,但我可以在静态函数中创建对象没问题。还有别的办法吗?

CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)windowsthread, (LPVOID)i, NULL, &m_id);

static DWORD_PTR WINAPI windowsthread()
{
OBJECT->call();
}

class object
{
private:

public:

object(){}
~object(){}
void call(){}
};
class calls_object
{
private:

object* OBJECT;

public:

calls_object()
{
OBJECT = new object();
}
~calls_object(){}

#ifdef _WIN32
static void windows_function()
{
OBJECT->call();
}
#endif
};
int main()
{
calls_object O;

}

最佳答案

这个函数:

static void windows_function()
{
OBJECT->call();
}

声明为static。这意味着它不接收隐式 this 指针:换句话说,它不对 calls_object实例 进行操作。因此,它看不到 OBJECT 成员变量。

将函数声明为非静态函数,或将 OBJECT 声明为 static 成员变量(在您的应用程序中更有意义)。

Basically the function must be static because its really a simplified version of the code which creates a windows thread

由于您(不幸的是)处理接受函数指针的函数 (CreateThread),您甚至不能使用 std::bind。但是,CreateThread 允许您提供接受指针的函数(指向 void,请参阅 ThreadProc 的原型(prototype))。

只需将指向对象 的指针作为第四个参数传递给CreateThread,然后让windowsFunction(void*) 接收该指针。在 windowsFunction() 中,它仍然是 static 或全局的(事实上,您根本不需要 calls_object 类),您可以将该指针转换为指向 object 的指针并对其调用 call()


另请注意,您的类 calls_object 正在泄漏内存,因为您忘记了 delete 您在 calls_object 的构造函数中创建的指针:

~calls_object() 
{
delete object; // DON'T FORGET THIS!
}

关于C++ 错误 : invalid use of member 'calls_object::OBJECT' in static member function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15186384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com