&引用;类::数据成员是私有的;错误,但我';我用一个成员函数操作它? 我对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

&引用;类::数据成员是私有的;错误,但我';我用一个成员函数操作它? 我对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,c++,object,private-members,data-members,C++,Object,Private Members,Data Members,我知道数据成员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(fl

我知道数据成员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;
}
#包括
#包括
#定义PI 3.14159
使用名称空间std;
班级圈子{
私人:
浮球x1、y1、x2、y2;
受保护的:
浮动距离(浮动x1、浮动y1、浮动x2、浮动y2){
返回sqrt(晶圆厂((x2-x1)*(x2-x1))+晶圆厂((y2-y1)*(y2-y1));
};
公众:
浮动半径(浮动x1、浮动y1、浮动x2、浮动y2){
浮动半径=距离(x1,y1,x2,y2);
返回rad;
};
浮动周长(浮动半径){
返回2*PI*rad;
};
浮动区域(浮动半径){
返回PI*rad*rad;
};
浮点数填充类对象(浮点数x1main、浮点数x2main、浮点数y1main、浮点数y2main){
x1=x1main;
x2=x2main;
y1=y1main;
y2=y2main;
};
};
int main(){
环肌;
浮球x1main、x2main、y1main、y2main;
cout-main;
couty2main;
myObj.populate_classobj(x1main、x2main、y1main、y2main);

cout在
main
末尾的各种插入语句尝试使用
myObj.x1
,它尝试使用
myObj
的成员
x1
。它们不能,因为
x1
是私有的。不管代码对该值做了什么;私有的是私有的。您可以从内部访问该值trong>成员函数或朋友函数,但不是来自外部。

当调用
radius
和其他方法时,您试图访问类外的
private
成员

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;
但是您真正的问题在于逻辑。为什么需要将参数传递给类的
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\u classobj
使其有效。相反,请使用适当的构造函数:

circle(float x1main,float x2main,float y1main,float y2main) :
x1(x1main),
x2(x2main),
y1(y1main),
y2(y2main)
{
};
并将对象创建为:

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

大多数代码都不需要显示问题。在这个特定的示例中,问题很容易看到,但一般来说,将代码缩减到可以显示问题所在的最小值。