오류: C++에서 개체 없이 멤버 함수를 호출할 수 없습니다.
이 기사에서는 C++를 사용하여 객체 지향 프로그래밍을 수행하는 동안 흔히 발생하는 객체 없이 멤버 함수를 호출할 수 없습니다
오류에 대해 설명합니다. 또한 오류에 대한 잠재적 수정 사항도 제공합니다.
C++에서 오류: 개체 없이 멤버 함수를 호출할 수 없음
수정
객체 지향 프로그래밍에서 작업할 때 “객체 없이 멤버 함수를 호출할 수 없습니다"라는 C++의 일반적인 오류가 자주 발생합니다. 이 오류의 원인은 클래스를 인스턴스화하지 않고 클래스의 일부 멤버 메서드를 호출하기 때문입니다.
모든 클래스에는 일련의 데이터 멤버와 일부 멤버 함수가 있습니다. 멤버 메서드나 함수에 액세스하려면 클래스 개체를 만든 다음 이 개체를 사용하여 메서드를 호출/액세스해야 합니다.
다음 코드를 고려하십시오.
#include <iostream>
using namespace std;
class Rectangle {
private:
int length = 5;
int width = 8;
public:
double getArea() { return length * width; }
};
int main() { cout << "Area: " << Rectangle::getArea() << endl; }
이 코드는 다음 출력을 생성합니다.
위의 코드 조각에서 라인 #16은 클래스 이름을 사용하여 getArea()
메서드를 호출하려고 시도합니다. 클래스의 모든 비정적 멤버는 클래스의 개체를 통해서만 액세스해야 합니다. 따라서 라인이 오류를 생성합니다.
클래스의 인스턴스를 사용하여 멤버 함수에 액세스
오류는 다음과 같이 클래스의 객체로 함수/메서드를 호출하여 해결할 수 있습니다.
int main() {
Rectangle r;
cout << "Area: " << r.getArea() << endl;
}
이렇게 하면 올바른 출력이 제공됩니다.
Area: 40
정적 멤버 함수 사용
정적 멤버 함수는 호출하는 데 개체가 필요하지 않은 클래스의 함수입니다. 범위 결정 연산자 ::
를 사용하여 클래스 이름으로 직접 호출할 수 있습니다.
정적 멤버 함수를 사용할 때 특정 제한 사항을 염두에 두어야 합니다. 정적 멤버 함수는 클래스의 정적 데이터 멤버에만 액세스할 수 있으며 다른 정적 멤버 함수만 호출할 수 있습니다.
객체 없이 멤버 함수를 호출할 수 없습니다
오류에 대한 솔루션을 설명하는 아래 예를 살펴보겠습니다.
#include <iostream>
using namespace std;
class Rectangle {
private:
int length = 5;
int width = 8;
public:
double getArea() { return length * width; }
static void getShapeName() { cout << "Hello, I am a Rectangle." << endl; }
};
int main() {
Rectangle r;
cout << "Area: " << r.getArea() << endl;
Rectangle::getShapeName();
}
그러면 다음과 같은 결과가 나타납니다.
Area: 40
Hello, I am a Rectangle.