2009-06-26 22 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 
相關問題