Управление вектором одного класса внутри двух функций другого класса - PullRequest
0 голосов
/ 05 июля 2011

Это кажется очень очень сложным, я много пытался решить его, но когда я изменяю размер закрытого члена внутри шаблона / класса, т.е. когда я вызываю Operator :: InitExtVector, я изменяю размер intVect через его адрес, и когда Я показываю / вызываю Operator :: ShowExtVector, его размер снова равен 0, чего не должно быть. Почему теряется векторная информация?

У меня есть шаблон / класс, Base.H:

#include <vector>
typedef std::vector <unsigned long int >  varVect1D_ul;

<template <typename PS>
class Base{
private:
   PS bla;
   varVect1D_ul intVect;    

public:
      varVect1D_ul* dataVect(){return &intVect}
}

некоторые операции выполняются внутри класса Operator, обычно без шаблона, Operator.H:

 class Operator{
   public:
     .....
   private:

     void InitExtVector(std::vector <Base<float> > BaseVect){ 
             varVect1D_ul *pVect;

             for(i=0...BaseVect.size()){
                 pVect=dataVect();
                 pVect->resize(10);
              }              
        } // end InitExtVector

    void ShowExtVector(std::vector <Base<float> > BaseVect){
             varVect1D_ul *pVect;

             for(i=0...BaseVect.size()){
                 pVect=BaseVect[i].dataVect();
                 cout<<pVect->size();
              } 
    }//end  ShowExtVector  

  };  //end class

, а код клиента выглядит someOperations.C:

  #include "Base.H"
  #include "Operator.H"


  foo(){

   std::vector <Base<float> >  BaseVect(2);
    //do some initization of BseVect;

   Operator *ObjOper= new Operator;    

   ObjOper->InitExtVector(BaseVect);
   ObjOper-> ShowExtVector(BaseVect);



  }

Весь синтаксис в порядке, адреса pVect внутри InitExtVect и ShowExtVector одинаковы

Любая помощь будет с радостью оценена

С уважением

JORR

1 Ответ

1 голос
/ 05 июля 2011

Я думаю, что вы хотите взять ваши векторы по ссылке:

void InitExtVector(std::vector <Base<float> > & BaseVect);
void ShowExtVector(std::vector <Base<float> > & BaseVect);

Кроме того, вы имели в виду это в InitExtVector:

for(i=0 ; i < BaseVect.size() ; ++i){
    pVect=BaseVect[i].dataVect();
    pVect->resize(10);
}    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...