为啥在 VC++ 调试器上计算表达式时会出现“成员函数不存在”错误?
Posted
技术标签:
【中文标题】为啥在 VC++ 调试器上计算表达式时会出现“成员函数不存在”错误?【英文标题】:Why do I get a "member function not present" error when evaluating expressions on the VC++ debugger?为什么在 VC++ 调试器上计算表达式时会出现“成员函数不存在”错误? 【发布时间】:2009-06-26 22:46:40 【问题描述】:我在另一个 DLL MyDll.dll
上有一个静态方法 MyClass::myMethod()
。在我的代码中,我调用了这个方法,它编译并运行良好。
但是当我在即时窗口(或监视窗口)中尝试 MyClass::myMethod()
时,我总是得到:
MyClass::myMethod()
CXX0052: Error: member function not present
为什么会这样?
更新:我发现当我使用context operator 时它可以工作:
,,MyDLLMyClass::myMethod()
不过,我不太确定为什么需要它,所以我会稍等片刻,看看是否有人有一个很好的解释。
更新 2:我被要求提供更多信息。不幸的是,我所描述的几乎就是我所拥有的。这是在第三方代码中。该方法驻留在不同的 DLL 上,声明如下:
class MyClass
public:
// ...
_declspec(dllimport) static const char *getDirectory(void);
它是这样调用的:
MyClass::getDirectory ()
我没有找到来源。它是在VC++9下的Debug模式下编译的。
【问题讨论】:
似乎监视窗口不够智能,无法找到以这种方式运行的源。你有没有试过用你自己的函数来包装这个调用 - char* foo() return MyClass::getDir(); ?它可能会以这种方式工作,因为 MyClass 的源代码将在编译时而不是运行时解析。 【参考方案1】:好吧,我不知道为什么,但调试器不够聪明,无法知道该类在另一个 DLL 中,因此您必须使用 context operator 明确告诉它:
,,MyDLLMyClass::myMethod()
【讨论】:
为我工作(在我为模块加载 PDB 之后)。谢谢!【参考方案2】:这可能是因为您的静态函数是内联定义的。
我对这门课的测试:
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
【讨论】:
@fretje 它不是内联的——这个类在另一个封闭源代码的 DLL 中。我实际上已经设法让它工作(见我的更新),但我真的不知道为什么。以上是关于为啥在 VC++ 调试器上计算表达式时会出现“成员函数不存在”错误?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我安装的vc6.0之后,编译程序的时候总会出现这个图标呢?