2016-06-13 1 views
0

Хорошо, я редактирую свой код, что я хочу сделать, просто я имею большую форму с corrdinates (x, y). то, что я хочу сделать, это изменить размер моей примитивной формы, сохранить ее внутри новой фигуры внутри класса под названием «новый» и перенести эту новую фигуру на кордины (x, y), которые я хочу.new Редактировать область и координаты

// 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; 
} 

Теперь у меня четыре ошибки: В функции 'INT Main()': 66: 6: ошибка: 'moveF' не был объявлен в этой области 68:51: ошибка: нет функции согласования для вызова to 'New :: moveF()' 68:51: примечание: кандидат: 21:11: note: void Shape :: moveF (int, int) 21:11: примечание: кандидат ожидает 2 аргумента, 0 предоставлено , Также я не думаю, что могу использовать «move.f», я создал какую-нибудь помощь?

+0

Ваш вопрос неясен, не могли бы вы подробно рассказать о том, что вам нужно? – shrike

+0

@shrike Я сделал эскиз. это может помочь – FL93

+0

Возможно, вы хотите создать класс 'Shape', а затем вывести из него классы (такие как' Квадрат' и 'Ell'). Это то, что вы имели ввиду? – Beta

ответ

0

Ну, компилятор говорит вам именно то, что проблема:

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

недействительный код. Вы имели в виду kit.moveF? Кроме того, почему четыре параметра? moveF имеет два.

std :: cout < < "Cordinates are:" < < kit.moveF();

имеет две ошибки: во-первых, moveF требует двух параметров, которые вы не предоставляете, во-вторых, kit.moveF является недействительным и, следовательно, не будет производить ничего, что может показать std :: cout.

Кроме того, к вашим атрибутам x1, x2, y1, y2 нельзя получить доступ извне. Это, похоже, не предназначено. Производный класс мог бы получить к ним доступ, но никто не делает этого прямо сейчас.

Кроме того, New - это ужасное имя для класса. Сначала смутил меня, чтобы увидеть Новый комплект ;. Новый, очевидно, не зарезервирован, но он чувствует себя сдержанным, если вы понимаете, что я имею в виду.

Мой совет заключается в том, что вы читаете учебное пособие относительно классов и методов. Кажется, что ваше понимание того, как работают методы, является ошибочным.

+0

Я исправил его, но теперь я получаю In function 'int main()': 68:47: ошибка: нет соответствующей функции для вызова «New :: moveF()» 68: 47: примечание: кандидат: 21: 7: note: void Shape :: moveF (int, int) 21: 7: примечание: кандидат ожидает 2 аргумента, 0 предоставлено @Aziuth – FL93

+0

Опять же, как и ваш компилятор говорит вам: Вы вызываете moveF без параметров, но для этого требуется два. Вы должны указать некоторые значения для x_delta и y_delta. Вы должны называть его как kit.moveF (5,3); Но давайте сделаем правильный подход, давайте начнем с того, что вы расскажете нам, что должен сделать moveF. И то, что должен делать сам класс. Является ли moveF для перевода формы? Если да, почему бы не x1 + = x_delta?И почему x1 больше не используется? – Aziuth

+0

@ FL93 Возможно, чтобы дать вам что-то более твердое, что вы, вероятно, захотите в этой строке, написать std :: cout << «Координаты:« << kit.getCoordinatesAsString(); с методом std :: string getCoordinatesAsString() {std :: string ret = std :: to_string (x1) + "" + std :: to_string (x2) + "" + std :: to_string (x3) + "" + станд :: to_string (x4); return ret; }. Поскольку вы пытались использовать moveF для этого, опять же, повторяю, мой совет заключается в том, что вы читаете базовый учебник о том, как все работает. – Aziuth