2015-03-18 70 views
0

我移植一些基於ATL頭爲MinGW和碰到的問題與此代碼曖昧過載「操作!=」問題

CComBSTR bstrHelpFile; 
     hr = pTypeLib->GetDocumentation(-1, NULL, NULL, NULL, &bstrHelpFile); 

     if (SUCCEEDED(hr) && bstrHelpFile != NULL) 
     { 
      .. 
     } 

的錯誤消息,我得到的是這種

C:\mingw64\opt\atlmfc\include/atlbase.h:5882:37: error: ambiguous overload for 'operator!=' (operand types are 'ATL::CComBSTR' and 'long long int') 
    if (SUCCEEDED(hr) && bstrHelpFile != NULL) 
            ^
C:\mingw64\opt\atlmfc\include/atlbase.h:5882:37: note: candidates are: 
C:\mingw64\opt\atlmfc\include/atlbase.h:5882:37: note: operator!=(BSTR {aka wchar_t*}, BSTR {aka wchar_t*}) <built-in> 

這是來自ATL標題的代碼atlbase.h

有關如何解決此問題的任何建議?

+0

刪除'!= NULL'? – chris 2015-03-18 23:52:39

+0

是的,它做到了。不知道爲什麼這會成爲一個問題? – MistyD 2015-03-18 23:53:31

+5

'NULL'不是一個非常好的空指針。這就是爲什麼我們有'nullptr'。 – chris 2015-03-18 23:54:01

回答

0

顯然,問題出在operator !=CComBSTR類的多個版本中。最有可能的固定的首選方法/解決這個問題是使用CComBSTR.Length()成員函數:

if(SUCCEEDED(hr) && bstrHelpFile.Length()) 
{ 
    // ... 

的原因是NULL有效價值BSTR,如果你想檢查是否字符串爲空,則需要考慮到這個值可以是空指針和零長度字符串的有效指針。