Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Считывание из StringGrid в vector


Автор: mal1na 2.6.2011, 02:04
Доброго времени суток, форумчане.
Возникла проблема с использованием контейнеров при считывании данных из СтрингГрида. 
В стринггриде задаются координаты точек (x,y,z) для построения графика. Кол-во точек может быть неограничено. Считываю из в контейнер . компилируется. а при попытки построить график выдает ошибку.  Project raised exception class std::out_of_range with message "Exception Object Address: 0x1E6973A'

пробовала разными способами считывать, ни в какую, либо эта ошибка либо пишет , что данные не являются float.

вот код. Помогите, пжлст!!. Что я делаю не так?

класс графика
Код
class TGraphicTable : public TObject3D{
private:
    int FPoint;
//контейнеры соответсвенно для X, Y, Z
    std::vector <float> FPX;
    std::vector <float> FPY;
    std::vector <float> FPZ;
    
public:
    int GetPoint(void){return FPoint;}
    void SetPoint( int point ){ FPoint = point;}

   //функции для контейнеров соответсвенно для X, Y, Z
   std::vector <float> GetFPX(){ return FPX;}
   void SetFPX( std::vector<float>&p ){FPX = p;}
   std::vector <float> GetFPY(){ return FPY;}
   void SetFPY( std::vector<float>&p ){FPY = p;}
   std::vector <float> GetFPZ(){ return FPZ;}
   void SetFPZ( std::vector<float>&p ){FPZ = p;}

    TGraphicTable(){
       FPoint=1;//инициализирую кол-во точек (пока 1)
       FPX.push_back(0.0);
       FPX.push_back(5.0);
       FPX.push_back(10.0);
       FPY.push_back(0.0);
       FPY.push_back(5.0);
       FPY.push_back(10.0);
       FPZ.push_back(0.0);
       FPZ.push_back(5.0);
       FPZ.push_back(10.0);
       //    = std::vector <float>( 0.0f, 1.0f, 10.0f);
      // FPY = std::vector <float>( 0.0f, 1.0f, 10.0f);
      // FPZ = std::vector <float>( 0.0f, 1.0f, 10.0f);
      
    }
    virtual ~TGraphicTable(){}
    virtual void Draw(void);
};


и непосредственно использую функции для контейнеров в другом Unit
Код
std::vector <float> X;
       std::vector <float> Y;
       std::vector <float> Z;

...
int point=gtable->GetPoint();
       int i=1;
       while (i<MassivPoints->RowCount)
       {
       X.push_back(StrToFloat(MassivPoints->Cells[1][i]));
       Y.push_back(StrToFloat(MassivPoints->Cells[2][i]));
       Z.push_back(StrToFloat(MassivPoints->Cells[3][i]));
        i++;
       }   
//присваиваю Vector Х вектору FRX Из класса TGpraphicTable
       gtable->SetFPX(X);
       gtable->SetFPY(Y);
       gtable->SetFPZ(Z);



Буду очень признательна, если поможете!

Автор: ZVano 2.6.2011, 11:30
Лучше объедини координаты в структуру:
Код

struct T3DCoordinate{
  int X;
  int Y;
  int Z;
  T3DCoordinate(int newX. int newY, int newZ){
    X = newX;
    Y = newY;
    Z = newZ;
  }
};
typedef vector<T3DCoordinate> T3DCoordinates;

class TGraphicTable : public TObject3D{
private:
  T3DCoordinates coordinates;

TGraphicTable(){
   coordinates.push_back(T3DCoordinate(1, 2, 3));
   coordinates.push_back(T3DCoordinate(4, 5, 6));
   coordinates.push_back(T3DCoordinate(7, 8, 9));
}

Автор: xvr 2.6.2011, 12:05
Индексы строк и колонок в StringGrid'е считаются с нуля. У тебя - с 1

Автор: mal1na 2.6.2011, 12:55
xvr, дело в том, что мне и надо, чтобы с 1. так в нулевой строке у меня записано X Y Z, а в нулевом столбцу идет перечисление точек.
так что . если считывать с ), то в контейнере будет не нужная мне информация, ну и никак с++ не сможет строку символов перевести в float.


ZVano, спасибо. попытаюсь)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)