VS2008에서 VS2013으로 코드를 이식하려고하는데 std :: bind에서 오류가 발생합니다. 오류 C2668 오류 : '바인딩': 오버로드 된 함수에 대한 모호한 호출을 말합니다. 여기에 일부 코드입니다 :이 코드는 비주얼 스튜디오 2008에서 일VS2008에서 VS2003으로 이식 할 때 C2668 오류가 발생했습니다.
// Relevant prototypes:
class CLineaPlanta:public SomeBase { /*...*/ };
int SomeBase::TipoLinea()const;
void SomeBase::TipoLinea(int val);
// function paramater: const std::shared_ptr<CLineaPlanta>& lineasBuscar
// function parameter: int tipoLinea;
std::shared_ptr<CLineaPlanta> lineas;
std::remove_copy_if(lineasBuscar.begin(), lineasBuscar.end(),
std::back_inserter(lineas),
bind(std::not_equal_to<int>(), bind(&CLineaPlanta::TipoLinea, _1), tipoLinea));
하지만) (컴파일러의이 TipoLinea의 버전을 알아내는 힘든 시간을 보내고, 2013 년
물론 Visual Studio에서 언급 된 오류를 제공 전화하려고 해요. getter 버전을 getTipoLinea로 바꾸면 오류가 사라집니다.
관련성이있는 경우 SomeBase는 추상적이지 않으며 CObject (이유는 모르겠 음) 및 코드의이 부분과 관련이없는 인터페이스에서 파생됩니다.
누구나 VS2008에이 문제가 없으며이를 방지하는 방법을 설명 할 수 있습니까? (물론 함수의 이름을 바꾸는 것 이외의 다른 방법)?
당신과 함께 다시 작성 빠르고 쉽게 찾을 수 있습니다 람다 함수. –
물론입니다. 그리고 나는 그것을 끝낼 것이라고 생각합니다. 그러나 나는 그것을 다시 쓰기 시작하기 전에 그것을 "일하기"를 원한다. 그리고 다른 비슷한 오류가 있습니다. – MikMik