0

エラー!setAll() 関数で宣言されていない xcor

ある種の合成を行うために Circle クラスに PointType のオブジェクトを作成しましたが、Circle のコンストラクターの初期化時にそれが示されています。

" [エラー] 'ycor' はこのスコープで宣言されていませんでした"

" [エラー] 'xcor' はこのスコープで宣言されていませんでした"

setAll() 関数を使用して半径を取得するために、Circle クラスに xcor と ycor が必要です

助けてください!私が台無しにしているもので。

#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);

}
4

3 に答える 3

0

xcor,ycor を Circle のコンストラクター引数に宣言し、

Radius を計算する前に、次の行を追加します。

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

埋め込まれた obj1 の代わりに、Circle の PointType を継承することも検討できます。

class Circle : public PointType
{
public: Circle(int x, int y):PointType(x, y) {}
...
/* remove obj1 */
}
于 2012-04-10T16:30:50.107 に答える
0

あなたのクラスには、 orCircleと呼ばれるメンバー変数がありません。オブジェクトの値を取得する場合、関数は次のようになります。xcorycorPointTypesetAll

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どちらにもアクセスできないためycorです。

于 2012-04-10T16:27:25.053 に答える
0
  1. xcor と ycor について何も知らないため、Circle コンストラクターを変更する必要があります。

    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())) );

于 2012-04-10T16:33:11.260 に答える