2013-07-06 2 views
1

이것은 내 main.cpp 코드입니다.클래스의 유형 한정자 오류를 수정하는 방법은 무엇입니까?

오류 C2662 : '문자열 :: 인쇄': 입력 오류 3 문자열과

void Display(const String &str1, const String &str2, const String &str3) 
{ 
    cout << "str1 holds \""; 
    str1.print(); // the error is here about the str1 
    cout.flush(); 
    cout << "\" (length = " << str1.length() << ")" << endl; 

    cout << "str2 holds \""; 
    str2.print(); 
    cout.flush(); 
    cout << "\" (length = " << str2.length() << ")" << endl; 

    cout << "str3 holds \""; 
    str3.print(); 
    cout.flush(); 
    cout << "\" (length = " << str3.length() << ")" << endl; 
} 

이 전달 된 3 String 객체의 값과 길이 밖으로 출력 인쇄입니다 변환 할 수 없습니다 'this'포인터 '문자열에서'문자열 '&'

이것은 내 구현 파일에 있습니다 : 내가 여기 뭔가 잘못 됐니?

void String::print() 
{ 
cout << m_pName << ": "; 
cout << (int)m_str1 << ", "; 
cout << (int)m_str2 << ", "; 
cout << (int)m_str3 << endl; 
} 
+9

만들기'인쇄 :

print 방법 const을 확인'무효 인쇄() –

+1

을 const''(INT)이 m_str1' 보이는 ** 아주 * * dodgy. 적어도 C++ 스타일의 캐스트를 사용하고 변수 이름을 의미있는 것으로 변경하십시오. –

+0

DRY라는 프로그램에는 규칙이 있습니다. 반복하지 마십시오. 코드가 매우 심하게 기분을 상하게합니다. 한 번에 하나의 문자열을 처리하도록 표시하고 같은 것을 세 번 수정하면 저장하게됩니다 (또는 한 번 수정하면 다른 두 가지를 잊어 버리고 왜 작동하지 않는지 궁금합니다 ...) – aryjczyk

답변

1

str1constString에 대한 참조이다.

간단한 말로하면 컴파일러는 str1.print()str1을 수정하지 않도록하고 싶습니다.

따라서 존재하지 않는 print 메서드의 오버로드를 찾습니다. `) (A`const` 자격을 갖춘 멤버 함수

class String 
{ 
    ... 

    void print() const; 
       ^^^^^^ 
    ... 
}; 


void String::print() const 
{     ^^^^^ 
... 
} 
관련 문제