2012-06-19 3 views
0

추상 클래스에 아래 첨자 연산자 ([])를 오버로드하려고하면 오버로드로 호출되는 함수가 구체적인 개체에 구현됩니다.오버로드 된 첨자 연산자에서 가상 함수 호출

class CollectionBase { 
public: 
    double& operator[] (const int nIndex) 
    { 
     return getValue(nIndex); 
    } 

    virtual double getValue(int index) = 0; 
}; 

class Collection : public CollectionBase 
{ 
    double getValue(int index) { return 0; } 
}; 

오전 데 문제는 내 컴파일러가 과부하에의 getValue 호출에 오류를 던지고 있다는 점이다.

아무도 내가 뭘하려고 오전의 구문을 알고 있나요

좌변을해야합니다 const가 아닌 참조의

초기 값?

+0

'operator []'에서'double'에 대한 참조를 반환하겠습니까? –

답변

4

getValue에서 반환 된 임시 값에 대한 참조를 반환하는 것이 문제입니다. 두 함수 모두 double&을 반환하거나 둘 다 double을 반환하십시오.

+0

참조가 의도 된 경우 'return 0;'은 오버로드 된'getValue'에서 문제가됩니다. –

+0

답장을 보내 주셔서 감사합니다. 과부하가 참조 여야한다고 생각했습니다. – jimmyjambles

+0

@Charles Bailey : 'return 0'은 게시 할 코드를 최소화 한 것으로 가정합니다. –

관련 문제