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 중국어 웹사이트의 기타 관련 기사를 참조하세요!