2017-03-08 140 views
2

昨天我已經實現了一些測試函數,並且所有的編譯和工作都沒有錯誤。今天,我回到我的電腦,我的std::bind的下劃線是紅色的,但編譯沒有錯誤。看起來像Intellisense和編譯器不同意std::bind類型。我怎樣才能解決這個問題?在vs2015中使用std :: functional的錯誤肯定錯誤

#include <functional> 

class MyClass { 
public: 
    int doE() { 
     return 0; 
    } 

    int doF() { 
     return 1; 
    } 
}; 


void main() 
{ 
    MyClass obj; 
    std::function<int()> f = std::bind(&MyClass::doE, obj); // underlined red 
    std::cout << f(); 
} 

錯誤消息如下:

Error (active) 
    no suitable user-defined conversion from "std::_Binder<std::_Unforced, int (MyClass::*)(), MyClass &>" to "std::function<int()>" exists 
    functionals 
    c:\functionals\functionals\thirdFunctionOnObject.h 

我有同樣的錯誤類型(智能感知說有錯誤,但它編譯就好了),在更復雜的代碼,在那裏我用std::mem_fn().

+1

智能感知通常可以安全地忽略。這幾乎完全沒用。 –

+2

Visual Studio IntelliSense分析器與Visual C++編譯器使用的不同。智能感知有時會認爲有效的代碼無效並將其報告爲錯誤。 –

+0

嘗試使用lambda來代替'std :: bind',因爲除了'std :: bind'怪癖導致的模糊中斷之外,使用'std :: bind'的原因非常少,來自複雜和不可讀的錯誤消息'std :: bind'錯誤,和一般的受虐狂? – Yakk

回答

1

有VS 2015 C++的同樣的問題,我討厭它。微軟讓我瘋狂。

現在我正在使用一個討厭的工作,將代碼移到靜態函數中。在你的情況下,它將類似於以下內容:

class MyClass { 
    // other code 

    int doE() { 
     return 0; 
    } 

    static int statDoE(MyClass * myClass) { 
     return myClass->doE(); 
    } 

}