4.8 ++ g와 같은 오류 생성하는 코드의 증류 버전 다음 여기find_if()는 CONST 함수 예기치 반복자 타입을 리턴
x.cpp: In member function ‘void Container::find() const’:
x.cpp:11:71: error:
conversion from ‘__gnu_cxx::__normal_iterator<const Element*, std::vector<Element> >’ to non-scalar type ‘std::vector<Element>::iterator {aka __gnu_cxx::__normal_iterator<Element*, std::vector<Element> >}’ requested vector<Element>::iterator it = find_if(v.begin(), v.end(), f);
및 코드된다
#include <algorithm>
#include <vector>
using namespace std;
struct Element{};
struct Functor{ bool operator()(const Element &){return false;}; };
struct Container{
vector<Element> v;
void find() const {
Functor f;
vector<Element>::iterator it = find_if(v.begin(), v.end(), f);
}
};
int main() { return 0; }
find()
함수에서 const 한정자를 제거하면 오류가 사라집니다. 오류의 원인은 무엇입니까? 표준에 대한 언급이 권장됩니다. 관심 주제에 초점을 맞추기 위해 술어 등의 논리가 제거되었습니다. clang 3.4도 비슷한 결과를 산출합니다. v
이후
'main'에서'return 0'이 함축되어 있습니다. –
C++ 11을 사용하는 경우 반환 된 변수에 auto를 사용하십시오. –