代码之家  ›  专栏  ›  技术社区  ›  Pedro d'Aquino

在VC++调试器上计算表达式时,为什么会出现“成员函数不存在”错误?

  •  7
  • Pedro d'Aquino  · 技术社区  · 17 年前

    我有一个静态方法, MyClass::myMethod() 在另一个DLL上, MyDll.dll . 在我的代码中,我调用这个方法,它编译并运行良好。

    但当我尝试 MyClass::MyMethod()。 在即时窗口(或监视窗口)中,我总是得到:

    MyClass::myMethod()
    CXX0052: Error: member function not present
    

    为什么会这样?

    更新 :我发现当我使用 context operator 它的工作原理是:

    {,,MyDLL}MyClass::myMethod()
    

    不过,我不太清楚为什么需要这样做,所以我要等一会儿,看看是否有人能给出一个好的解释。

    更新2 :我被要求提供更多信息。不幸的是,我所描述的几乎就是我所有的。这是第三方代码。方法位于不同的dll中,声明如下:

    class MyClass
    {
     public:
     // ...
     _declspec(dllimport) static const char *getDirectory(void);
    }
    

    它的调用方式如下:

    MyClass::getDirectory ()
    

    我没有找到来源。它是在VC++9的调试模式下编译的。

    2 回复  |  直到 17 年前
        1
  •  2
  •   glenneroo Menyus777    9 年前

    嗯,我不知道为什么,但调试器不够聪明,无法知道类在另一个dll中,因此您必须使用 context operator :

    {,,MyDLL}MyClass::myMethod()
    
        2
  •  0
  •   fretje    17 年前

    这可能是因为静态函数是内联定义的。

    我在这门课上的测试:

    class myclass
    {
    public:
        static int inlinetest() 
        { 
            return 0; 
        }
        static int test();
    };
    
    int myclass::test()
    {
        return 0;
    }
    

    在即时窗口中提供此输出:

    myclass::inlinetest()
    CXX0052: Error: member function not present
    myclass::test()
    0