2012-06-05 3 views
0

정적 const 데이터 멤버를 저장하는 유틸리티 클래스 집합이 있습니다. 이제는 기능 클래스에서이 데이터 멤버를 사용해야합니다. 정적 const 개체에 대한 참조 (포인터가 필요 없다)를 사용할 계획이지만 아래 오류가 계속 발생합니다. 코드의 논리적/기술적 실수를 지적 해 주시겠습니까? 유형의 참조의정적 const 데이터 개체에 대한 참조

#include <string> 

class staticData 
{ 
    public: 
    static const int cs = 1; 
    static const staticData data1; 

    private: 
    staticData(int id_): _id(id_) //NOTE: Private constructer, static access only!! 
    { } 

    int _id; 
}; 

const staticData staticData::data1(1001); 

class testReference 
{ 
    public: 
    testReference(): _member(staticData::data1) 
    {} 

    private: 
    staticData& _member; 
}; 

무효 초기화 âstaticData & 형태의 표현에서 staticDataâ

답변

2

âconst 당신은 const가 아닌 참조를 통해 const 객체를 참조하려고 시도하고 있습니다.

참조 번호가 const이 아니므로 원래 개체를 참조를 통해 수정할 수 있으므로 개체를 const으로 선언 할 때 계약을 위반하게됩니다.

  • 제거 참조 constconst
  • static const staticData data1;에서 :

    2 개 가지 옵션이 있습니다 const staticData& _member;

편집이 :

의견으로 당

, 당신은 할 수 있습니다 :

class testReference 
{ 
    public: 
    testReference(): _member(&staticData::data1) 
    {} 

    private: 
    staticData const * _member; 
}; 

이렇게하면 _member이 가리키는 값을 변경할 수 있지만 (참조에서는 불가능 함) 개체 자체는 변경할 수 없습니다.

+0

static const staticData data1을 유지하려고하지만 _member가 참조 할 수있는 것을 변경할 수 있기를 원합니다. 그게 가능하니? – vid

+0

@vid no. 다른 개체를 참조하도록 참조를 변경할 수 없습니다. 항상'data1'을 참조 할 것입니다. 당신은 그것에 대한 포인터를 사용할 수 있습니다. –

+0

@vid 편집보기 ... –

1

_member은 돌연변이를 허용하는 참고 문헌이다. data1은 변경할 수 없습니다. 읽기 전용 객체에 대한 쓰기 가능보기를 제공하는 것은 불가능합니다.

관련 문제