다음 코드를 작성하여 연산자 []가 과부하되는 문제가 발생했습니다. 여기 testmain.cpp에 대한 코드입니다 :과부하 연산자 문제 [
#include"test.hpp"
int main()
{
C tab = C(15);
bool b = tab[2];
return 0;
}
을 그리고 여기에 헤더 파일 test.hpp의 :
#ifndef _test_
#define _test_
class C
{
friend class ref;
int s;
public:
class ref
{
public:
bool v;
ref();
ref(bool x);
ref& operator = (ref a);
ref& operator = (bool x);
};
C();
C(int a);
bool operator[] (int i) const ;
ref operator[] (int i);
};
#endif ///_test_
내가 코드를 컴파일하려고, 나는 다음과 같은 오류 얻을 :
testmain.cpp: In function ‘int main()’:
testmain.cpp:6:16: error: cannot convert ‘C::ref’ to ‘bool’ in initialization
을
컴파일러는 자동으로 인덱싱 연산자 []가 항상 ref 유형의 객체를 반환한다고 가정하고 부울 유형 변수를 반환하는 연산자 []를 무시합니다. 컴파일러가 적절한 오버로드 된 연산자 []를 사용할 때 "알 수 있도록"코드를 수정할 수 있습니까?
컴파일러는'tab [2]'를 기반으로 호출 할 함수를 찾아 내려고 시도합니다. 이후까지'bool b ='부분을 보지 않습니다. –