2011-04-08 5 views
1

클래스를 만들려고합니다. 간결함을 위해 여기에 멍청 할 것입니다.삽입 연산자, const 키워드로 인해 컴파일러 오류가 발생합니다.

이렇게하면 컴파일러 오류가 발생합니다. "오류 : 개체에 형식 한정자가 멤버 함수와 호환되지 않습니다."

코드이다

에서
ostream& operator<<(ostream& out, const Foo& f) 
{ 
    for (int i = 0; i < f.size(); i++) 
     out << f.at(i) << ", "; 

    out << endl; 
    return out; 
} 

함수 인덱스 I에 배열로부터 값을 반환 (나는 INT).

Foo에서 const 키워드를 제거하면 모든 것이 효과적입니다. 왜?

EDIT : 요청 당, 멤버 함수에 대한 선언. 그렇지 않으면 const를 개체에 대해 조치를 할 수 .H

public: 
    int size(void); 
    int at(int); 

통화 당

당신은 당신의 기능과 const를 같은 "크기"기능 "에"선언 할 필요가
int Foo::size() 
    { 
     return _size; //_size is a private int to keep track size of an array. 
    } 

    int Foo::at(int i) 
    { 
     return data[i]; //where data is an array, in this case of ints 
    } 
+1

'Foo :: at'와'Foo :: size'는 어떻게 선언되어 있습니까? –

+0

@James McNellis - 업데이트 – DivinusVox

답변

9

,

.

그래서, 함수는 다음과 같이 보일 수 있습니다 :

int Foo::at(int i) 
{ 
    // whatever 
} 

을 그리고 그것은 다음과 같이해야합니다 : 당신은 상수 객체에 객체를 변경하는 함수를 호출하고

int Foo::at(int i) const 
{ 
    // whatever 
} 
+0

나는 이것을주의 깊게 들여서이 정보를 찾으려고 노력했지만, 검색 결과가 다소 비효율적이라는 사실을 발견했습니다. (일반적으로 키워드 const의 다른 모든 용도를 지켜 보면서) 우연히도 그것? – DivinusVox

+0

@DivinusVox : 물론, [여기 있습니다.] (http://www.parashift.com/c++-faq-lite/const-correctness.html#faq-18.10) –

+0

Google에 자세한 정보를 원하면, [const 멤버 함수 C++ (http://www.google.com/#hl=en&sugexp=ldymls&xhr=t&q=const+member+function+c%2B%2B&cp=22&qe=Y29uc3QgbWVtYmVyIGZ1bmN0aW9uIA&qesig=DqNoS265PW-OV1W4fJKLTg&pkc=AFgZ2tlZ1z5HD9rGViIHpFuc_SD02K1_M9TSs4bGzk6RAa3dMm_gG8DcwAB6cdwkmm0HD6JkOkwM_7E7ZWv-wZ3eI5MmL_vDow&pf 시도 = p & sclient = psy & aq = 0 & aqi = & aql = & oq = const + member + function + & pbx = 1 & bav = on.2 or.r_gc.r_pw. & fp = e9ce1e11ecd3b0b1) –

0

을 . at 함수가 Foo 클래스의 객체를 const으로 선언하여 변경하지 않았는지 확인하십시오 (또는 at은 의 내부 데이터를 실제로 변경해야하는 경우 수행 할 수 있도록 매개 변수에서 const을 제거해야합니다.).

관련 문제