2017-03-08 13 views
2

어제 일부 테스트 기능을 구현했으며 모든 것이 컴파일되고 오류없이 정상적으로 작동했습니다. 오늘 나는 내 PC로 돌아 왔고 내 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

Intellisense는 대개 안전하게 무시할 수 있습니다. 거의 쓸모가 없습니다. –

+2

Visual Studio IntelliSense 파서는 Visual C++ 컴파일러에서 사용하는 파서와 다릅니다. IntelliSense는 유효 코드가 유효하지 않다고 생각하여 오류로보고합니다. –

+0

'std :: bind' 대신에 람다를 사용해보십시오. 왜냐하면'std :: bind' quirks로 인한 불분명 한 break 이외의 람다 대신에'std :: bind'를 사용할 이유가 거의 없기 때문입니다. 'std :: bind' 실수와 일반적인 매저키즘? – Yakk

답변

1

VS 2015 C++에서 같은 문제가 있었지만, 나는 그것을 싫어한다. Microsoft는 나를 미치게 만듭니다.

지금은 코드를 정적 함수로 옮겨서 불쾌한 작업을하고 있습니다. 귀하의 경우 다음과 유사합니다 :

class MyClass { 
    // other code 

    int doE() { 
     return 0; 
    } 

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

}