- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我从下面的代码中得到以下错误。
错误:在静态成员函数中无效使用成员“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/
我从下面的代码中得到以下错误。 错误:在静态成员函数中无效使用成员“calls_object::OBJECT”|错误:从这个位置 来自 OBJECT->call(); 第 29 行。 基本上函数必须是
我是一名优秀的程序员,十分优秀!