从函数c ++返回后的值错误

时间:2016-01-08 15:52:17

标签: c++ function file

我的函数从文件读取数据并且运行良好,但是当我返回数据时出错了。这就是它的样子:

Console

代码:

struct csvh
{
//struct declaration
};


float glowa_csv(csvh CSVHead, float EndOfHead)
{
    ifstream obraz;
    obraz.open("POP_OCT.csv", ios::binary);
    //wczytywanie naglowka
    obraz.read(CSVHead.data, sizeof(CSVHead.data)-1); 
    obraz >> CSVHead.lateral_range;
    obraz.read(CSVHead.lat_px_size, sizeof(CSVHead.lat_px_size)-1);
    obraz >> CSVHead.lateral_pxsize;
    ... ( and so on)

    EndOfHead=obraz.tellg();
    obraz.close();

    cout << CSVHead.data<<endl<<CSVHead.godzina<<(rest of variables)<<endl;

    return CSVHead.lateral_range, CSVHead.lateral_pxsize, (...), EndOfHead;
} 

int main()
{
    float EndOfHead;
    csvh CSVHead;

    glowa_csv(CSVHead, EndOfHead);

    system("Pause");
    system("cls");
    cout << CSVHead.data<<endl<<CSVHead.godzina<<(...)<<endl;
    return 0;
}

2 个答案:

答案 0 :(得分:4)

如果要从函数返回多个值,则必须返回类/结构或通过引用传递变量。

通过引用传递是完全有效的,但对于某些人来说可能会让人感到困惑,因此返回一个复杂的对象可能是更好的&#34;解。您可以在元组中返回值:

std::tuple<int,int,int> method(int input)
{
  /* do your stuff here */

  return { errorCode , value1 , value2 };
}

因此您不必创建额外的类型。显然,元组中的确切类型将取决于您需要返回的内容

答案 1 :(得分:3)

首先,您不能从

这样的函数返回多个值
return CSVHead.lateral_range, CSVHead.lateral_pxsize, (...), EndOfHead;

由于comma operator,结果只返回EndOfHead。您想要做的是通过引用传递CSVHeadEndofHead,以便该函数修改您传递给它的变量,并将更改反映在main()中。您可以将功能更改为

void glowa_csv(csvh &CSVHead, float &EndOfHead)

彻底摆脱回归声明。