2009-06-26 19 views
7

我有一个静态方法,MyClass::myMethod()另一个DLL,MyDll.dll。在我的代码中,我调用了这个方法,它编译并运行正常。为什么在评估VC++调试器上的表达式时会出现“成员函数不存在”错误?

但是当我尝试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下的Debug模式下编译。

+0

难道我们看到一些代码吗? – 0xC0DEFACE 2009-06-27 01:41:43

+0

看起来好像监视窗口不够智能,并且无法找到以这种方式运行的源代码。你有没有尝试用你自己的函数包装这个调用 - char * foo(){return MyClass :: getDir(); }?它可能以这种方式工作,因为MyClass的源代码将在编译时而不是运行时解决。 – eran 2009-06-28 08:38:32

+0

那么,它现在有效吗? – ralphtheninja 2009-06-28 09:11:11

回答

2

嗯,我不知道为什么,但调试是不够聪明要知道,类是在另一个DLL,所以你必须使用显式地告诉它的context operator

{,,MyDLL}MyClass::myMethod() 
0

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

我与此类测试:

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 
相关问题