2012-04-10 29 views
0

錯誤!XCOR未申報的SETALL()函數C++組成程序錯誤(XCOR未申報)

我創造PointType的對象Circle類做排序的成分,但在圈的構造函數初始化它可見

「[錯誤]‘YCOR’不是在這個範圍內聲明」

「[錯誤]‘XCOR’不是在這個範圍內聲明」

我想XCOR和YCOR在我的圈子類,以便使用setAll()函數獲取Radius離子

請幫忙!在我搞砸了。

#include<iostream> 
#include<cstdlib> 
#include<cmath> 
using namespace std; 

class PointType{ 

    private: 

    int xcor;//x coordinate 
    int ycor;//y coordinate 
    public: 

    PointType();//constructor 
    PointType(int x,int y); 
    void setPoint(int x,int y); 
    int getx() const; 
    int gety() const; 


}; 
PointType::PointType():xcor(0),ycor(0) 
{ 

} 

PointType::PointType(int x,int y):xcor(x),ycor(y){ 
} 

void PointType::setPoint(int x,int y){ 
    xcor=x; 
    ycor=y; 

} 

int PointType::getx() const{ 
    return xcor; 
    } 


int PointType::gety() const{ 
    return ycor; 
    } 

class Circle{ 

    protected: 
     float Radius; 
     float Area; 
     int Circumference; 
     float pi; 
     PointType obj1; 

    public: 

    Circle(); 
    void setAll(); 
    float getRadius(); 

    float getArea(); 


    float getCircumference(); 
    void callFunction(); 
    void printAll(); 
    void pt(int x,int y); 


}; 

Circle::Circle():Radius(0),Area(0),Circumference(0),pi(3.1415),obj1(xcor,ycor){ 
} 

void Circle::setAll(){ 

     Radius=sqrt( (xcor*xcor) + (ycor*ycor) ); 
     Area=pi*Radius*Radius; 
     Circumference=2*pi*Radius; 
} 

float Circle::getRadius(){ 
    return Radius; 
} 

float Circle::getArea(){ 
    return Area; 
} 

float Circle::getCircumference(){ 
    return Circumference; 
} 

void Circle::printAll(){ 

     cout<<"The Area is :"<<Area<<endl; 
     cout<<"The Circumference is :"<<Circumference<<endl;  
    } 
void Circle::pt(int x,int y){ 
    obj1.setPoint(x,y); 

} 

回答

0

你的類Circle沒有叫xcor或任何成員變量。如果你希望得到您的PointType對象的值,你setAll函數應該是這樣的:

Radius=sqrt( (obj1.getx()*obj1.getx()) + (obj1.gety()*obj1.gety()) ); 

而且你必須改變你的構造:

Circle::Circle():Radius(0),Area(0),Circumference(0),pi(3.1415),obj1(0,0) 

,因爲它沒有訪問任何xcor或。

0

聲明XCOR,YCOR金環的構造函數參數,並

計算半徑之前加入這一行:

int xcor = obj1.getx(), ycor = obj1.gety(); 
Radius=sqrt( (xcor*xcor) + (ycor*ycor) ); 

你也可以考慮繼承PointType爲圓形,而不是嵌入OBJ1:

class Circle : public PointType 
{ 
public: Circle(int x, int y):PointType(x, y) {} 
... 
/* remove obj1 */ 
} 
0
  1. 你必須改變你的Circle構造函數,因爲它的k NOW的有關XCOR和YCOR什麼:

    Circle::Circle():Radius(0),Area(0),Circumference(0),pi(3.1415),obj1(42,56)

  2. Circle類仍然不知道XCOR和YCOR,所以你必須改變SETALL方法:

    Radius=sqrt( static_cast<double>((obj1.getx()*obj1.getx()) + (obj1.gety()*obj1.gety())) );