带结构的向量范围

时间:2009-03-06 06:37:30

标签: c++

初学者问题:

我正在读取文件,将结构存储到结构成员中,然后将结构名称存储到向量中。

我输出矢量的大小并调试它以查看它是否有效,并且我从文件中分离了它。

我在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

2 个答案:

答案 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在堆上创建它。