C++ cli 指向成员的指针对于托管类无效 我在VisualStudioC++中有一个Windows窗体。(CLR)
在头文件中,我声明C++ cli 指向成员的指针对于托管类无效 我在VisualStudioC++中有一个Windows窗体。(CLR),c++-cli,C++ Cli,在头文件中,我声明bool正在运行(以查找记事本是否正在运行): 现在在一个复选框中,我希望它检查进程是否正在运行 private: System::Void checkBox2_CheckedChanged(System::Object^ sender, System::EventArgs^ e) { if (bool application::GUI::isRunning) label1->Text = "cat"; 我得到这个错误: 指向成员的指针对于托管类无效 我尝
bool正在运行
(以查找记事本是否正在运行):
现在在一个复选框中,我希望它检查进程是否正在运行
private: System::Void checkBox2_CheckedChanged(System::Object^ sender, System::EventArgs^ e) {
if (bool application::GUI::isRunning)
label1->Text = "cat";
我得到这个错误:
指向成员的指针对于托管类无效
我尝试将其更改为&isRunning
。这给了我与上面和下面相同的错误
对绑定成员函数表达式的非法操作
如何修复此问题?我认为您以错误的方式进行函数调用。 可能应该是这样的,
if (application::GUI::isRunning())
{
label1->Text = "cat";
}
上面只是一个进行适当函数调用的提示-但是由于
isRunning
是一个私有成员函数,如何直接从类外调用它,以及如何在不创建任何对象的情况下调用它。它不是静态成员函数。请检查这一点。下面的所有内容似乎都是错误的:
if (bool application::GUI::isRunning)
bool
。定义一个布尔变量,并将函数结果赋给该变量:
bool result = isRunning(...);
if(result)
...
application::gui::isRunning
表达式返回试图定义为bool变量的isRunning
函数的指针LPCSTR arg = ...;
if(application::GUI::isRunning(arg))
label1->Text = "cat";
GUI
类的static
函数
或者GUI
名称空间下的函数(也就是GUI
名称空间下的application
名称空间)
我的猜测是GUI
是一个表单
类,因此您尝试调用该函数,因为该函数不是静态的
,您将再次遇到错误。因此,您有两种情况需要解决:
如果您从GUI的另一个函数中得到此错误
LPCSTR arg = ...;
if (isRunning(arg))
label1->Text = "cat";
另外,您需要一个指向GUI对象的指针:
LPCSTR arg = ...;
if (gui-> isRunning(arg))
label1->Text = "cat";
谢谢你的回复。是的,GUI是一种表单。由于某些原因,我仍然从
LPCSTR arg=isRunning中得到错误“指向成员的指针对于托管类无效”代码><代码>如果(Gui> ISRun(ARG))也会给我一个错误:“表达式必须有布尔类型(或者可以转换为BoL)”,我正在学习C++,所以我可能在这里丢失了一些非常简单的东西。@埃文,如果你调用GUI的另一个函数的函数,那就是使用第一个选项。否则(假设您是从GUI 2类调用它)您需要一个指向GUI的指针。我特意写了gui->isRunning()
小写。它应该告诉您,gui
是指向gui实例的指针。(代码> GUI *GI=……/代码>)顺便说一下,如果你想学习C++,你应该从标准C++开始(它是C++ 14)。代码> CLR < /Cord>版本的C++被称为代码> VisualC++ +代码>,它确实有差异。仍然保持错误:“成员的指针对于托管类无效”,但我自己这样理解。代码>如果(const char LPCSTR=true)标签1->Text=“running”;else标签1->Text=“未运行”代码>我很感激帮助,谢谢你的建议,我会先学习规则C++。我只需要一个GUI,我正在做的小项目,读QT很难,不知道它会是C++的一个不同的变体。这也有效(我想它更好,因为使用LPCSTR不是特定的)。<代码>(const char pNoToPosith=真)Label1-> >文本=“运行”;else标签1->Text=“未运行”代码>
LPCSTR arg = ...;
if (isRunning(arg))
label1->Text = "cat";
LPCSTR arg = ...;
if (gui-> isRunning(arg))
label1->Text = "cat";