"class::data member is private" 오류가 발생했는데 멤버 함수를 사용하여 작업하고 있습니까?

StackOverflow https://stackoverflow.com//questions/12664615

문제

저는 C++을 처음 접했고, 이 오류를 유발하는 원인을 이해하지 못합니다.

/home/---/Documents/C++/---_lab2/lab2c.cpp||In function ‘int main()’:|
Line 9: error: ‘float circle::x1’ is private
Line 58: error: within this context

데이터 멤버 x1(x2,y1,y2도 마찬가지)이 비공개라는 것을 알고 있지만 클래스 서클의 멤버인 함수를 사용하여 myObj 개체에 대해 작업 중이므로 여전히 작동하면 안 되나요?누군가 여기서 무엇이 잘못되었는지 설명해 줄 수 있나요?

#include <iostream>
#include <cmath>
#define PI 3.14159

using namespace std;

class circle{

private:
float x1,y1,x2,y2;

protected:

float distance(float x1,float y1,float x2, float y2){
    return sqrt(fabs((x2-x1)*(x2-x1))+fabs((y2-y1)*(y2-y1)));
};

public:

float radius(float x1, float y1, float x2, float y2){
    float rad = distance(x1,y1,x2,y2);
    return rad;
};

float circumference(float rad){
    return 2*PI*rad;
};

float area(float rad){
    return PI*rad*rad;
};

float populate_classobj(float x1main,float x2main,float y1main,float y2main){
x1 = x1main;
x2 = x2main;
y1 = y1main;
y2 = y2main;
};

};

int main(){

circle myObj;
float x1main,x2main,y1main,y2main;
cout << "Coordinates of center" << endl;
cout << "X: ";
cin >> x1main;
cout << "Y: ";
cin >> y1main;
cout << "Coordinates of point on circle" << endl;
cout << "X: ";
cin >> x2main;
cout << "Y: ";
cin >> y2main;

myObj.populate_classobj(x1main,x2main,y1main,y2main);

cout << "Radius is " << myObj.radius(myObj.x1,myObj.y1,myObj.x2,myObj.y2) << endl;
cout << "Circumference is " << myObj.circumference(myObj.radius(myObj.x1,myObj.y1,myObj.x2,myObj.y2)) << endl;;
cout << "Area is " << myObj.area(myObj.radius(myObj.x1,myObj.y1,myObj.x2,myObj.y2)) << endl;



return 0;
}
도움이 되었습니까?

해결책

액세스를 시도 중입니다. private 수업 외의 구성원이 전화할 때 radius 및 기타 방법.

하지만 진짜 문제는 논리에 있습니다.예를 들어 매개변수를 전달해야 하는 이유는 무엇입니까? radius 수업 방법:

float radius(float x1, float y1, float x2, float y2){
    float rad = distance(x1,y1,x2,y2);
    return rad;
};

원은 이미 자체 포함되어 있으므로 다음과 같이 하면 됩니다.

float radius(){
    float rad = distance(x1,y1,x2,y2);
    return rad;
};

와 같다:

float circumference(){
    return 2*PI*radius();
};

float area(){
    return PI*radius()*radius();
};

또한 다음 사항에 유의하세요.

circle myObj;

잘못된 개체를 만듭니다.전화하지 않아도 돼 populate_classobj 단지 그것을 유효하게 만들기 위해서입니다.대신 적절한 생성자를 사용하세요.

circle(float x1main,float x2main,float y1main,float y2main) :
x1(x1main),
x2(x2main),
y1(y1main),
y2(y2main)
{
};

다음과 같이 객체를 생성합니다.

circle myObj(x1main,x2main,y1main,y2main);

다른 팁

끝에 있는 다양한 삽입문 main 사용해 보세요 myObj.x1, 멤버를 사용하려고 시도합니다. x1 ~의 myObj.그들은 할 수 없습니다. 왜냐하면 x1 비공개입니다.코드가 해당 값으로 무엇을 하는지는 중요하지 않습니다.비공개는 비공개입니다.다음에서 값에 액세스할 수 있습니다. 내부에 멤버 함수나 친구 함수이지만 외부에서는 사용할 수 없습니다.

cout << "Radius is " << myObj.radius(myObj.x1,myObj.y1,myObj.x2,myObj.y2) << endl;
cout << "Circumference is " << myObj.circumference(myObj.radius(myObj.x1,myObj.y1,myObj.x2,myObj.y2)) << endl;;
cout << "Area is " << myObj.area(myObj.radius(myObj.x1,myObj.y1,myObj.x2,myObj.y2)) << endl;

개인 변수에는 접근할 수 없습니다.또한 그렇게 해서는 안 됩니다.귀하의 메소드 서명은 다음과 같아야 합니다. myObj.radius() 또는 myObj.area() ~처럼 x1 y1 x2 y2 이미 회원입니다. circle myObj.따라서 인수로 다시 전달하는 것은 중복됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top