初学者问题:
我正在读取文件,将结构存储到结构成员中,然后将结构名称存储到向量中。
我输出矢量的大小并调试它以查看它是否有效,并且我从文件中分离了它。
我在vector * ptrFunc()函数中执行此操作。
我返回& vectorObject所以我不需要使用矢量类型ptr obj声明。
从一个函数移动到另一个函数,即使使用我的返回类型,我是否需要重新解析文件?
下面是一些代码,我不认为我很清楚:
//Varaible Declartions/Intializations
//Open File
vector<myStruct> *firstFunc()
{
while ( !inFile->eof() )
{
// Isolating each feild delimited by commas
getline( *inFile, str1, ',' );
myStruct.f1 = str1;
getline( *inFile, str2, ',' );
myStruct.f2 = str2;
getline( *inFile, str3, ',' );
myStruct.f3 = atof( str3.c_str() );
getline( *inFile, str4 );
myStruct.f4 = atof( str4.c_str() );
v.push_back( myStruct );
// We have the isolated feilds in the vector...
// so we dance
}
return &v;
}
// Now do i still have to do the getlines and push_back with the vector again in another function?
vector<myStruct> *otherFunc()
{
sStruct myStruct;
vector<myStruct> *v = firstFunc(),
vInit;
v = &vInit
vInit.push_back( myStruct );
...
所以我调试它并且我的结构成员丢失了所有数据!
我应该在第一个函数中做多少,以便我的struct成员不会丢失他们的数据?
我的猜测是创建一个void函数或其他东西。但是然后将其存储到矢量中将是问题所在。
我只是有范围问题。 :P
答案 0 :(得分:2)
以这种方式声明你的功能:
void firstFunc(vector<myStruct> &v)
{
...
}
void otherFunc(vector<myStruct> &v)
{
...
}
以这种方式使用它们
void foo()
{
vector<myStruct> v;
firstFunc(v);
otherFunc(v);
}
答案 1 :(得分:1)
是否可能因此从firstFunc()
返回的向量'v'被分配到堆栈中?如果是这样,那么这可能是你的问题,因为你在函数退出时返回超出范围的对象的地址。
所以解决这个问题,按值返回向量,或者使用new
在堆上创建它。