2012-04-10 9 views
0

Fehler! XCOR nicht angemeldeter bei SETALL() FunktionC++ Zusammensetzung Programmfehler (XCOR nicht angemeldeter)

I Aufgabe PointType in Circle-Klasse geschaffen hatte, eine Art Komposition zu tun, aber bei der Initialisierung des Konstrukteurs des Kreises ist zeigt, dass

"[Fehler] 'ycor' wurde in diesem Rahmen nicht deklariert"

"[Fehler] 'XCOR' wurde in diesem Rahmen nicht deklariert"

ich möchte XCOR und ycor in meinem Kreis Klasse, um den Radius mithilfe der Funktion setAll() zu erhalten ion

Bitte helfen Sie mir bei dem, was ich vermasseln.

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

} 

Antwort

0

Ihre Klasse Circle hat keine Membervariable xcor oder genannt. Wenn Sie die Werte Ihres PointType Objekt erhalten möchten, sollten Sie Ihre setAll Funktion wie folgt aussehen:

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

Auch müssen Sie Ihren Konstruktor ändern:

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

, da es keinen Zugriff auf hat xcor oder entweder.

0

declare XCOR, ycor Circle‘Konstruktorargument und

diese Zeile hinzufügen, bevor Radius Berechnung:

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

Sie könnten auch PointType für Kreis, statt eingebettet obj1 erben betrachten:

class Circle : public PointType 
{ 
public: Circle(int x, int y):PointType(x, y) {} 
... 
/* remove obj1 */ 
} 
0
  1. Sie haben Ihren Kreis Konstruktor zu ändern, da es k nows nichts über XCOR und ycor: noch nicht weiß, über XCOR und ycor

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

  2. Die Circle-Klasse, so dass Sie SETALL Methode ändern müssen:

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