这似乎非常复杂,我尝试了很多来解决它,但是当我调整模板/类中的私有成员时,即,当我调用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);
}
所有语法都没问题,InitExtVect和ShowExtVector中的pVect地址是相同的
欢迎任何帮助
注意
JORR
答案 0 :(得分:1)
我想你想通过引用把你的载体放进去:
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);
}