Как указать моей программе значения, которые я ввожу в список? Переполнение стека

Так что я новичок и пытаюсь разобраться в этой проблеме:

Это мой кусок кода:

int main()
{

list<Shape*> shapes;
shapes.push_back(new Pentagon(Vertex(20, 10), 8));
shapes.push_back(new Rhombus(Vertex(50, 10), 8));

list<Shape*>::iterator itr = shapes.begin();
while (itr != shapes.end())
{
(*itr)->drawShape();

c.gotoXY(20, 10);
cout << (*itr)->area();
// scale shape (double it)
// draw shape
// rotate shape by 20 degrees
// draw shape

itr++;
}

cout << endl << endl << endl << endl << endl << endl << endl << endl;
system("pause");

}

Итак, в основном, первый блок текста добавляет два новых объекта, Пентагон и Ромб, к фигурам списка.

Эти объекты имеют 3 значения, координаты x и y и размер.

а затем в итераторе я пытаюсь нарисовать эти фигуры в консоли, которая работает нормально, но у меня есть проблема с c.gotoXY(); функция.
По сути, я хочу, чтобы область отображалась в середине фигуры. Это работает просто отлично, когда я набираю координаты вручную: (20, 10) в коде, для Пентагона. Вы можете видеть, что это то же самое, что и значения, которые я ввожу, когда добавляю новые вещи в список.

Но у меня будет много разных форм, и я не могу просто ввести значения вручную.

Я хотел бы связать значения x и y со значениями объектов в моем списке фигур следующим образом:

http://puu.sh/hlMMR/2f536907f9.png

по сути, каждый раз, когда итератор обходит его, он берет значения x и y следующего объекта в списке и помещает их в c.gotoXY();

Надеюсь, я объяснил это достаточно ясно, потому что сам едва понимаю.

Пожалуйста помоги.

@ Редактировать ~~~~~~~~~

когда я пытаюсь использовать

c.gotoXY(Vertex.getX(), Vertex.getY);

Я получаю это:
ошибка C3867: «Vertex :: getY»: вызов функции отсутствует в списке аргументов; использовать&Vertex :: getY ‘для создания указателя на член

0

Решение

Я представляю твои Shape Тип имеет функцию-член что-то вроде:

Vertex getPosition() const;

И ваш Vertex Тип имеет функции-члены что-то вроде:

int getX() const;
int getY() const;

В этом случае вы можете написать что-то вроде:

Shape* curr=*itr; //Get a pointer to the current shape from the iterator.
Vertex pos=curr->getPosition());//Get the position of the current shape.
c.gotoXY(pos.getX(),pos.getY());//Goto the current position of the current shape.

На месте:

c.gotoXY(20, 10);

Если вы еще не предоставили способы доступа к вершине фигуры и координатам вершины — это первая проблема, которую нужно решить.

РЕДАКТИРОВАТЬ: я замечаю в комментариях getX() а также getY() на месте. Это доступ к Vertex в форме, которая все еще открыта.

1

Другие решения

Если Shape класс еще не имеет, включить getPosition() функция, которая возвращает Vertex объект с позиции, с которой вы его инициализировали. Что-то вроде:

Vertex Shape::getPosition() const
{
return m_Position;    // position of the shape (this member would have been set by
// the constructor when you called, for example,
// shapes.push_back(new Pentagon(Vertex(20, 10), 8)); in the
// main function
}

Таким образом, в вашей основной функции вы можете вызвать ее, чтобы получить позицию и соответственно расположить фигуру:

while (itr != shapes.end())
{
(*itr)->drawShape();

Vertex position = (*itr)->getVertex();
c.gotoxy(position.getX(), position.getY());

cout << (*itr)->area();
++itr;
}

Кроме того, в вашей редакции оригинального сообщения:

c.gotoXY(Vertex.getX(), Vertex.getY);

вы пропустили «()», так что это будет:

c.gotoXY(Vertex.getX(), Vertex.getY());

Однако это не сработает, так как вы вызываете функции-члены getX() а также getY() через тип класса, а не через объект. Вы должны будете объявить и инициализировать объект класса перед вызовом его функций-членов, как я делаю с объектом position в то время как цикл выше.

1

По вопросам рекламы [email protected]