2016-06-13 5 views
0

Ok Ich bearbeite meinen Code, was ich tun möchte, ist einfach Ich habe eine große Form mit corrdinates (x, y). Ich möchte meine ursprüngliche Form ändern, sie in einer neuen Figur innerhalb einer Klasse namens "new" speichern und diese neue Form in die Koordinaten (x, y) verschieben, die ich möchte.new Edit Bereich und Koordinaten

// Example program 
#include <iostream> 
#include <string> 

// Base class Shape 

class Shape 
{ 
public: 

Shape(int inwidth, int inheight): width(inwidth), height(inheight){ 
} 
void ResizeW(int w) 
{ 
width = w; 
} 
void ResizeH(int h) 
{ 
height = h; 
} 
void moveF(int x_delta, int y_delta) 
{ 
x1 = x_delta; 
y1 = y_delta; 
x2 = x_delta; 
y2 = y_delta; 
} 

protected: 

int x1=0, y1=0, x2=5, y2=6; 
int width; 
int height; 
}; 

// Primitive Shapes 

class Ps2: public Shape 
{ 
public: 

Ps2 (int width, int height): Shape(width, height){ 
} 
int getArea() 
{ 
    return (width * height); 
} 
}; 

// Derived Shapes 

class New: public Ps2 
{ 

int x1_relativ, y1_relativ, x2_relativ, y2_relativ; 
public: 
int area; 
New(): Ps2(8, 4), area(getArea()){ } 
}; 



int main(void) 
{ 
New kit; 
moveF.kit (4, 3, 5, 7); 
std::cout << "Total area: " << kit.getArea(); 
std::cout << "Cordinates are: " << kit.moveF(); 

return 0; 
} 

Jetzt habe ich vier Fehler: In der Funktion 'int main()': 66: 6: Fehler: 'movef' nicht in diesem Umfang 68:51 erklärt wurde: Fehler: keine passende Funktion für Aufruf zu 'New :: movef()' 68:51: Anmerkung: Kandidat: 21.11: note: void Form :: movef (int, int) 21.11: note: Kandidat erwartet 2 Argumente, 0 bereitgestellt . Auch ich glaube nicht, dass ich "move.f" verwenden kann, habe ich Hilfe erstellt?

+0

Ihre Frage ist ziemlich unklar, können Sie bitte detailliert, was Sie brauchen? – shrike

+0

@shrike Ich habe eine Skizze gemacht. Es kann helfen – FL93

+0

Vielleicht möchten Sie eine 'Shape' Klasse erstellen und daraus Klassen (wie' Square' und 'Ell') ableiten. Meinst Du das? – Beta

Antwort

0

Nun, sagt der Compiler Sie genau das, was das Problem ist:

moveF.kit (4, 3, 5, 7);

ist kein gültiger Code. Meintest du kit.moveF? Auch warum vier Parameter? moveF hat zwei.

Std :: Cout < < "Koordinaten sind:" < < kit.moveF();

hat zwei Fehler, erstens, moveF benötigt zwei Parameter, die Sie nicht zur Verfügung stellen, zweitens, kit.moveF ist ein void und erzeugt daher nichts, was std :: cout anzeigen kann.

Auch Ihre Attribute x1, x2, y1, y2 sind von außen nicht zugänglich. Dies scheint nicht beabsichtigt zu sein. Eine abgeleitete Klasse könnte auf sie zugreifen, aber momentan gibt es keine.

Darüber hinaus ist New ein schrecklicher Name für eine Klasse. Verwirrt mich zuerst zu sehen, Neue Ausrüstung ;. Neu ist natürlich nicht reserviert, aber es fühlt sich zurückhaltend an, wenn Sie wissen, was ich meine.

Mein Rat ist, dass Sie ein Tutorial über Klassen und Methoden lesen. Es scheint, dass Ihr Verständnis, wie Methoden funktionieren, fehlerhaft ist.

+0

Ich habe es behoben, aber jetzt bekomme ich In Funktion 'int main()': 68:47: Fehler: keine passende Funktion für den Aufruf von 'New :: moveF()' 68: 47: Anmerkung: Kandidat: 21: 7: Anmerkung: void Form :: movef (int, int) 21: 7: Anmerkung: Bewerber erwartet 2 Argumente, 0 bereitgestellt @Aziuth – FL93

+0

Wieder, wie der Compiler sagt Ihnen: Sie rufen moveF ohne Parameter, aber es erfordert zwei. Sie müssen einige Werte für x_delta und y_delta angeben. Sie müssen es wie kit.moveF (5,3) nennen; Aber lass uns den richtigen Ansatz machen, lass uns damit beginnen, dass du uns sagst, was moveF tun soll. Und was die Klasse selbst tun soll. Soll moveF die Shape übersetzen? Wenn ja, warum nicht x1 + = x_delta?Und warum wird x1 nicht mehr benutzt? – Aziuth

+0

@ FL93 Vielleicht, um Ihnen etwas festeres zu geben, was Sie wahrscheinlich in dieser Zeile wollen, ist es, std :: cout << "Koordinaten sind:" << kit.getCoordinatesAsString(); mit der Methode std :: string getCoordinatesAsString() {std :: string ret = std :: zu_string (x1) + "" + std :: zu_string (x2) + "" + std :: zu_string (x3) + "" + std :: to_string (x4); Rückkehr ret; }. Da Sie versucht haben, moveF zu verwenden, um dies zu erreichen, wiederhole ich nochmals, mein Rat ist, dass Sie ein grundlegendes Tutorial lesen, wie die Dinge funktionieren. – Aziuth

Verwandte Themen