C++ 컴파일 오류: const가 아닌 객체는 const 멤버 함수를 호출할 수 없습니다. 어떻게 해결하나요?
C++에서 const 멤버 함수는 함수 선언 뒤에 const 키워드를 추가하는 것을 의미합니다. 이는 함수가 객체의 상태를 수정하지 않는다는 의미입니다. 객체가 const 유형인 경우 const가 아닌 일반 멤버 함수는 호출할 수 없지만 const 멤버 함수는 호출할 수 있습니다. 그러나 const가 아닌 개체가 const 멤버 함수를 호출하면 컴파일 중에 다음 오류가 발생합니다. const가 아닌 개체는 const 멤버 함수를 호출할 수 없습니다.
이 오류는 일반적으로 다음 두 가지 상황에서 발생합니다.
예:
class Example { public: void doSomething() const { // const function } }; int main() { Example obj; obj.doSomething(); // 编译错误 return 0; }
const 멤버 함수가 비-const 개체에서 호출되면 컴파일러는 위의 오류가 발생합니다. 이는 객체의 상태가 함수에 의해 변경될 수 있고 컴파일러는 const 멤버 함수가 실제로 객체를 수정하지 않는지 여부를 알 수 없기 때문입니다.
해결책:
이 오류를 방지하려면 호출 개체를 const로 표시해야 합니다. 이는 객체 유형 뒤에 const 키워드를 추가하여 달성할 수 있습니다. 예:
const Example obj; obj.doSomething(); // 正确,因为 obj 是 const 类型的
예:
class Example { public: void doSomething() { // non-const function } }; int main() { const Example obj; obj.doSomething(); // 编译错误 return 0; }
이 경우 객체는 const 유형이므로 , 컴파일러는 객체의 상태를 수정할 수 없다고 간주하여 const가 아닌 멤버 함수 호출을 거부합니다.
해결 방법:
객체의 상태를 꼭 수정해야 하는 경우 객체를 non-const 유형으로 변환할 수 있습니다. 이는 유형 변환 연산자 const_cast를 사용하여 달성할 수 있습니다. 예:
const Example obj; const_cast<Example&>(obj).doSomething(); // 正确,但不建议这样做
유형 변환에 const_cast를 사용하면 정의되지 않은 동작이 발생할 수 있으므로 형식 코드에서는 사용을 피해야 합니다.
요약
위는 두 가지 일반적인 C++ 컴파일 오류에 대한 솔루션입니다. 즉, const가 아닌 개체는 const 멤버 함수를 호출할 수 없습니다. 코드를 작성할 때 const 멤버 함수를 const로 표시하고 const 개체에서 const가 아닌 멤버 함수를 호출하지 않도록 주의해야 합니다. const 객체의 상태를 정말로 수정해야 하는 경우 유형 변환을 위해 const_cast를 사용해야 하지만 형식 코드에서는 사용을 피해야 합니다.
위 내용은 C++ 컴파일 오류: const가 아닌 객체는 const 멤버 함수를 호출할 수 없습니다. 어떻게 해결합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!