> 백엔드 개발 > C++ > C++ 구문 오류: const가 아닌 멤버 함수는 const 개체로 호출할 수 없습니다. 어떻게 해야 합니까?

C++ 구문 오류: const가 아닌 멤버 함수는 const 개체로 호출할 수 없습니다. 어떻게 해야 합니까?

PHPz
풀어 주다: 2023-08-22 13:57:05
원래의
1453명이 탐색했습니다.

C++ 구문 오류: const가 아닌 멤버 함수는 const 개체로 호출할 수 없습니다. 어떻게 해야 합니까?

C++는 매우 강력한 프로그래밍 언어이지만 C++를 배우고 사용할 때 필연적으로 몇 가지 문제에 직면하게 됩니다. 초보자를 자주 괴롭히는 문제 중 하나는 "비 const 멤버 함수는 const 개체로 호출할 수 없습니다."라는 오류 메시지입니다. 이번 글에서는 이 오류를 처리하는 방법을 살펴보겠습니다.

우선, 이 오류 메시지를 이해하려면 몇 가지 기본 지식을 알아야 합니다. C++에는 변수, 포인터 및 함수 매개변수를 수정하는 데 사용할 수 있는 const 키워드가 있는데, 이는 이러한 개체를 수정할 수 없음을 나타냅니다. C++에서 객체가 const로 선언되면 해당 멤버 함수도 const로 선언되어야 합니다.

const 개체를 사용하여 비-const 멤버 함수를 호출하면 컴파일러는 "비-const 멤버 함수는 const 개체로 호출할 수 없습니다."라는 오류 메시지를 표시합니다. 이는 C++에서 const 개체가 읽기 전용이고 수정할 수 없기 때문입니다. const가 아닌 멤버 함수는 객체의 상태를 수정할 수 있으므로 const 객체와 함께 호출할 수 없습니다.

그렇다면 이 오류를 어떻게 처리해야 할까요? 먼저, 이 멤버 함수가 개체의 상태를 수정해야 하는지 여부를 결정해야 합니다. 객체의 상태를 수정할 필요가 없다면 이 멤버 함수를 const로 선언해야 합니다. 이렇게 하면 const 객체를 사용하여 이 멤버 함수를 호출하더라도 오류가 발생하지 않습니다.

예를 들어,

class Person {
public:
    //getter函数,在不修改对象的情况下获取成员变量的值
    std::string getName() const;
    
    // setter函数,修改对象的成员变量值
    void setName(std::string name);
private:
    std::string m_name;
};
로그인 후 복사

클래스가 있다고 가정해 보겠습니다. 이 클래스에서 getName 함수는 m_name 값만 가져오고 객체의 상태는 수정하지 않습니다. 그러므로 const로 선언해야 합니다:

std::string getName() const;
로그인 후 복사

또한 이 함수를 정의할 때 함수 이름 뒤에 const 키워드도 추가해야 합니다:

std::string Person::getName() const {
    return m_name;
}
로그인 후 복사

이렇게 하면 const 개체를 사용하여 getName을 호출하더라도 기능을 수행하지 않으면 오류가 발생합니다.

멤버 함수가 객체의 상태를 수정해야 하는 경우 이를 const로 선언할 수 없습니다. 그러나 const 개체를 사용하여 이 함수를 호출하려면 이 개체를 const가 아닌 개체로 변환할 수 있습니다. 이 목적을 달성하기 위해 유형 변환을 사용할 수 있습니다. 예를 들어, const Person 객체 p가 있고 p의 m_name 멤버 변수 값을 수정하기 위해 setName 함수를 사용해야 한다고 가정합니다. 다음과 같이 할 수 있습니다.

const Person p;
Person& pRef = const_cast<Person&>(p); // 将const对象转化为非const对象
pRef.setName("New Name"); // 调用setName函数修改成员变量的值
로그인 후 복사

이 접근 방식은 권장되지 않습니다. 멤버 함수가 객체의 상태를 수정해야 하는 경우 const 객체를 사용하여 이 함수를 호출하는 것을 피해야 합니다.

간단히 말하면 C++에서는 const 키워드 사용에 주의해야 합니다. 객체가 const로 선언되면 해당 멤버 함수도 const로 선언되어야 합니다. "const가 아닌 멤버 함수는 const 객체로 호출할 수 없습니다."라는 오류가 발생하면 멤버 함수가 객체의 상태를 수정해야 하는지 여부를 주의 깊게 확인해야 합니다. 멤버 함수를 const 로 선언해야 합니다. 멤버 함수가 객체의 상태를 수정해야 하는 경우 const 객체를 사용하여 이 함수를 호출하는 것을 피해야 합니다.

위 내용은 C++ 구문 오류: const가 아닌 멤버 함수는 const 개체로 호출할 수 없습니다. 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿