Имеется программа, которая берет из файла значения, записывает их в вектор типа структуры и затем по этим значениям рисует фигуру: поля структуры - координаты х и у вершин фигуры, записанные в виде : х1, у1, х2, у2, .... При отрисовке одно единственное значение (4-ое получается) получается не тем, что ожидалось. На рисунке должен быть шестиугольник, но координата х одной из вершин куда-то уезжает. Компилятор говорит что у нее значение что-то типа "3,19е-307", хотя у всех остальных точек все в порядке. В конце еще на ошибку отправляет. Как можно исправить? Спасибо.
Заголовок класса:
#pragma once
#include <vector>
#include <string>
class polygone
{
public:
struct pointXY
{
double x;
double y;
};
polygone();
~polygone();
polygone unn(polygone *pol1, polygone *pol2);
const std::vector<pointXY*> poly() const;
};
Инициализация методов:
#include "stdafx.h"
#include "polygone.h"
#include <vector>
#include <string>
#include <fstream>
#include <iostream>
using namespace std;
polygone::polygone() {
poly();
}
polygone::~polygone()
{
}
polygone polygone::unn(polygone * pol1, polygone * pol2)
{
return polygone();
}
const std::vector<polygone::pointXY*> polygone::poly() const {
ifstream file("poly.txt");
vector<string> vals;
vector<pointXY*> pgn;
pointXY *polyget = new pointXY;
if (file.is_open()) {
string s;
while (getline(file, s, ';'))
{
vals.push_back(s);
}
file.close();
for (int i = 1; i < vals.size(); i += 2) {
polyget->x = atof(vals[i - 1].c_str());
pgn.push_back(polyget);
polyget->y = atof(vals[i].c_str());
pgn.push_back(polyget);
polyget++;
}
}
else {
//cout << "Open error!";
}
return pgn;
}
функция из главного окна:
void CPolygonsDlg::draw1()
{
pDC = CPolygonsDlg::BeginPaint(&pn);
pen = new CPen(PS_SOLID, 3, RGB(255, 0, 0));
pDC->SelectObject(pen);
polygone poly1;
vector<polygone::pointXY*> poly1s = poly1.poly();
for (int i = 0; i < poly1s.size() - 3; i+=2) {
pDC->MoveTo(poly1s[i]->x, poly1s[i + 1]->y);
pDC->LineTo(poly1s[i + 2]->x, poly1s[i + 3]->y);
}
}
pointXY *polyget = new pointXY;
Ваш указатель хранит адрес обьекта, созданного в куче. Следующий кусок памяти может быть инициализирован чем угодно, так как вы не под массив выделили память. Поэтому, когда вы в цикле инкрементируете указатель polyget++;
, то в векторе получите мусор. Вместо этого непонятного инкрементирования указателья, определение указателья перенесите в цикл. И вообше, зачем вы все время пытаетесь усложнять свой код, включая лишные обьекты и шаги?...
Виртуальный выделенный сервер (VDS) становится отличным выбором
Правильно ли я понимаю, что C++, в отличии от C, запрещает неявное приведение между enum и int?
PID это идентификатор (13 бит) в MPEG-TS потоке (стриме), присваиваемый каждому элементарному транспортному пакету (ЭТП)
ВОт у меня есть два кода, они выполняют одно и то жеНо первый работает должным образом, а второй нет
Есть классы Deck(колода) и Card(карточка)Задача при добавлении карты в колоду обновить описание колоды