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";