Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Вектор обнуляется.

87K
01 декабря 2015 года
Евгений Мелехов
2 / / 01.12.2015
Здравствуйте.
Начал изучать вектора. Появились трудности. Основная в том, что в одном юните вектор виден и работает, а в другом его длина нулевая.
Значит так.
Имеется файл "pre_comp.h"
 
Код:
#include <vector>
typedef struct MyPoint2D
{
 double dX;
 double dY;
 float otm;

}MyPoint2D;

std::vector<MyPoint2D> vPointsZem;
Далее Unit1.cpp
Код:
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "pre_comp.h"
// далее прочие объявления
....
// читаем точки из шейп-файла (Shapefile)
void OpenShapeFileZem(char* fileName)
{
    SHPHandle hSHP=SHPOpen(fileName, "rb" ); //открыть

    if(hSHP == NULL) return;
    if(hSHP->nShapeType == SHPT_POINT)
    {
        SHPObject *psShape;
        for(int i=0;i<hSHP->nRecords;i++)
        {
            psShape = SHPReadObject(hSHP, i);
            double fX = psShape->padfX[0];
            double fY = -psShape->padfY[0];
            MyPoint2D pt;
            pt.dX=fX;
            pt.dY=-fY;
            vPointsZem.push_back(pt);
            countZem++;
        }
    }
}

И тут все прекрасно работает (привел код чтобы было понятно как заполняется вектор)
Далее я рисую по точкам тоже в Unit1
 
Код:
for( i=0;i<vPointsZem.size();i++)
               {
                    glColor3f (1, 0, 0);
                    glBegin(GL_POINTS);
                      glVertex2f(vPointsZem[i].dX,vPointsZem[i].dY);
                    glEnd();
                }
Т.е. до сих пор проблем нет.
Далее к этому вектору vPointsZem мне нужно обратиться из другого юнита, допустим из Unit2.cpp
Unit2.cpp
Код:
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "pre_comp.h" // тут объявлены вектора
#include <vector> // можно и не добавлять - не влияет

// далее разный код
// и хочу еще раз нарисовать из этого юнита
                for( i=0;i<vPointsZem.size();i++) // vPointsZem.size() равен нулю!!!!
                {
                    glColor3f (1, 0, 0);
                    glBegin(GL_POINTS);
                      glVertex2f(vPointsZem[i].dX,vPointsZem[i].dY);
                    glEnd();
                }
Еще раз вопрос: как сохранить данные, загруженные в вектор при его вызове из разных юнитов. Как-то так...
Спасибо.
87K
01 декабря 2015 года
Евгений Мелехов
2 / / 01.12.2015
Решил.
В файле precomp.h добавить extern
 
Код:
extern std::vector<MyPoint2D> vPointsZem;
а в Unit1.h
 
Код:
std::vector<MyPoint2D> vPointsZem;
И все. Извиняюсь за беспокойство. Может кому поможет.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог