Откуда взялось значение

127
11 сентября 2019, 19:30

Имеется программа, которая берет из файла значения, записывает их в вектор типа структуры и затем по этим значениям рисует фигуру: поля структуры - координаты х и у вершин фигуры, записанные в виде : х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);
}   
}

Answer 1
pointXY *polyget = new pointXY;

Ваш указатель хранит адрес обьекта, созданного в куче. Следующий кусок памяти может быть инициализирован чем угодно, так как вы не под массив выделили память. Поэтому, когда вы в цикле инкрементируете указатель polyget++; , то в векторе получите мусор. Вместо этого непонятного инкрементирования указателья, определение указателья перенесите в цикл. И вообше, зачем вы все время пытаетесь усложнять свой код, включая лишные обьекты и шаги?...

READ ALSO
Отличия между enum в C и в C++

Отличия между enum в C и в C++

Правильно ли я понимаю, что C++, в отличии от C, запрещает неявное приведение между enum и int?

119
ffmpeg Как узнать PID для AVPacket?

ffmpeg Как узнать PID для AVPacket?

PID это идентификатор (13 бит) в MPEG-TS потоке (стриме), присваиваемый каждому элементарному транспортному пакету (ЭТП)

118
Не могу понять, где разница в двух кодах

Не могу понять, где разница в двух кодах

ВОт у меня есть два кода, они выполняют одно и то жеНо первый работает должным образом, а второй нет

132
Избавиться от лишнего if

Избавиться от лишнего if

Есть классы Deck(колода) и Card(карточка)Задача при добавлении карты в колоду обновить описание колоды

176