Вектор обнуляется.
Начал изучать вектора. Появились трудности. Основная в том, что в одном юните вектор виден и работает, а в другом его длина нулевая.
Значит так.
Имеется файл "pre_comp.h"
Код:
#include <vector>
typedef struct MyPoint2D
{
double dX;
double dY;
float otm;
}MyPoint2D;
std::vector<MyPoint2D> vPointsZem;
typedef struct MyPoint2D
{
double dX;
double dY;
float otm;
}MyPoint2D;
std::vector<MyPoint2D> vPointsZem;
Код:
#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++;
}
}
}
#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();
}
{
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();
}
#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();
}
Спасибо.
В файле precomp.h добавить extern
Код:
extern std::vector<MyPoint2D> vPointsZem;
Код:
std::vector<MyPoint2D> vPointsZem;