指向成员的指针对于托管 class 无效
A pointer-to-member is not valid for a managed class
我在 Visual Studio C++ 中有一个 Windows 表单。 (CLR)
在头文件中我声明bool isRunning
(查找记事本是否为运行):
private:
bool isRunning(LPCSTR pnotepad)
{
HWND hwnd;
hwnd = FindWindow(NULL, pnotepad);
if (hwnd != 0)
{
return true;
}
else
{
return false;
}
}
现在在复选框上,我希望它检查进程是否为 运行。
private: System::Void checkBox2_CheckedChanged(System::Object^ sender, System::EventArgs^ e) {
if (bool application::GUI::isRunning)
label1->Text = "cat";
我收到此错误:
a pointer-to-member is not valid for a managed class
我尝试将其更改为 &isRunning
。这给了我与上面相同的错误
illegal operation on bound member function expression
我该如何解决这个问题?
我认为您进行函数调用的方式不正确。
大概应该是这样的,
if (application::GUI::isRunning())
{
label1->Text = "cat";
}
以上只是进行正确函数调用的提示 - 但由于 isRunning
是一个私有成员函数,因此如何直接从 class 外部调用它而不创建任何对象。它不是静态成员函数。请检查这一点。
下面的一切似乎都是错误的:
if (bool application::GUI::isRunning)
如果您不想保存函数的结果,则不需要 bool
。要么定义一个布尔变量并将函数的结果分配给它:
bool result = isRunning(...);
if(result)
...
或
if(isRunning())
...
application::gui::isRunning
表达式 returns 您试图定义为 bool 变量的 isRunning
函数的指针。
假设您将前两个固定为:
LPCSTR arg = ...;
if(application::GUI::isRunning(arg))
label1->Text = "cat";
这意味着您正在调用 GUI
class 的 static
函数
或 GUI
命名空间下的函数(GUI
也在 application
命名空间下)。
我的猜测是 GUI
是一个 Form
class,所以您正在尝试调用,但由于该函数不是 static
,您将再次遇到错误。所以你有两种情况需要解决:
如果您从 GUI
的另一个函数中得到此错误
LPCSTR arg = ...;
if (isRunning(arg))
label1->Text = "cat";
否则您需要一个指向 GUI 对象的指针:
LPCSTR arg = ...;
if (gui-> isRunning(arg))
label1->Text = "cat";
我在 Visual Studio C++ 中有一个 Windows 表单。 (CLR)
在头文件中我声明bool isRunning
(查找记事本是否为运行):
private:
bool isRunning(LPCSTR pnotepad)
{
HWND hwnd;
hwnd = FindWindow(NULL, pnotepad);
if (hwnd != 0)
{
return true;
}
else
{
return false;
}
}
现在在复选框上,我希望它检查进程是否为 运行。
private: System::Void checkBox2_CheckedChanged(System::Object^ sender, System::EventArgs^ e) {
if (bool application::GUI::isRunning)
label1->Text = "cat";
我收到此错误:
a pointer-to-member is not valid for a managed class
我尝试将其更改为 &isRunning
。这给了我与上面相同的错误
illegal operation on bound member function expression
我该如何解决这个问题?
我认为您进行函数调用的方式不正确。 大概应该是这样的,
if (application::GUI::isRunning())
{
label1->Text = "cat";
}
以上只是进行正确函数调用的提示 - 但由于 isRunning
是一个私有成员函数,因此如何直接从 class 外部调用它而不创建任何对象。它不是静态成员函数。请检查这一点。
下面的一切似乎都是错误的:
if (bool application::GUI::isRunning)
如果您不想保存函数的结果,则不需要
bool
。要么定义一个布尔变量并将函数的结果分配给它:bool result = isRunning(...); if(result) ...
或
if(isRunning())
...
application::gui::isRunning
表达式 returns 您试图定义为 bool 变量的isRunning
函数的指针。假设您将前两个固定为:
LPCSTR arg = ...; if(application::GUI::isRunning(arg)) label1->Text = "cat";
这意味着您正在调用 GUI
class 的 static
函数
或 GUI
命名空间下的函数(GUI
也在 application
命名空间下)。
我的猜测是 GUI
是一个 Form
class,所以您正在尝试调用,但由于该函数不是 static
,您将再次遇到错误。所以你有两种情况需要解决:
如果您从 GUI
LPCSTR arg = ...;
if (isRunning(arg))
label1->Text = "cat";
否则您需要一个指向 GUI 对象的指针:
LPCSTR arg = ...;
if (gui-> isRunning(arg))
label1->Text = "cat";