我試圖從端口VS2008我的代碼VS2013,我掌握的std ::綁定一些錯誤。 錯誤說錯誤C2668:'bind':對重載函數的模糊調用。 下面是一些代碼:錯誤C2668在綁定,同時從VS2008移植到VS2013
// 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));
這段代碼在Visual Studio 2008中的工作,但給在Visual Studio中提到的錯誤2013年
顯然,編譯器有一個很難搞清楚TipoLinea的版本()我正試着打電話。如果我將getter版本重命名爲getTipoLinea,則錯誤消失。
以防萬一它是相關的,SomeBase非抽象的,從CObject(不知道爲什麼)和不相關的這部分代碼的接口派生。
任何人都可以解釋爲什麼VS2008沒有任何這方面的問題,以及如何防止它(除重命名功能,當然)?
您可能會發現它更快,更容易與改寫一個lambda函數。 –
當然。我想我最終會這樣做。但在我開始重寫之前,我想讓它「工作」。我在其他地方也有類似的錯誤。 – MikMik