Iter PhoneBookList::findLoc(string fname)
{
Iter iter;
for (iter=ListPhoneBook.begin(); iter!=ListPhoneBook.end(); iter++){
if (iter->phoneName == fname) return iter;
}
return iter;
}
int PhoneBookList::find(string fname) const {
CIter iter = findLoc(fname);
if (iter==ListPhoneBook.end())
return -1;
return iter->phoneNumber;
}
위두개중 find 함수를 const로 하면
CIter iter = findLoc(fname); 이줄에서
Description Resource Path Location Type
Invalid arguments '
Candidates are:
std::_List_iterator<Entry> findLoc(std::basic_string<char,std::char_traits<char>,std::allocator<char>>)
' phonebooklist.cpp /howcanlist2/src line 24 Semantic Error
이렇게 오류가 뜬다.
const를 클래스쪽이랑 여기서 지우면 정상적으로 되긴하는데 const를 꼭 붙여서 하고싶은데 방법 없나...
참고로 CIter가 Const_iterator다
find에 const 붙이고 싶으면 find가 사용하는 findLoc 함수에도 const를 붙여야 한다.
그 이유는 const를 붙이는 건 객체의 상태를 변화시키지 않을 거라는 표시와도 같은 데 거기 안에서 호출하는 함수가 const가 안 붙어있으면 객체의 상태가 변화되지 않을 거란 게 보장되지가 않잖아.
그러면
Description Resource Path Location Typeconversion from 'std::list<Entry>::const_iterator {aka std::_List_const_iterator<Entry>}' to non-scalar type 'Iter {aka std::_List_iterator<Entry>}' requested phonebooklist.cpp /howcanlist2/src line 18 C/C++ Problem 이오류뜨는데;
ListPhoneBook은 어디에 있는 멤버 변수인데? PhoneBookList 내부임?
만일 그렇다면 Iterator도 const 형으로 재정의해줘야 하는데 여러모로 귀찮으니 그냥 두 함수 모두 const 빼는 게 속 편함.