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

Wrong values after returning from function c++

本文关键字:错误 返回 函数 c++      更新时间:2023-10-16

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

控制台

代码:

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;
}

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

通过引用传递是完全有效的,但可能会让一些人感到困惑,因此返回复杂对象可能是"更好"的解决方案。您可以在元组中返回值:

std::tuple<int,int,int> method(int input)
{
  /* do your stuff here */
  return { errorCode , value1 , value2 };
}

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

首先,不能从这样的函数返回多个值

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

由于使用了逗号运算符,这最终只返回EndOfHead。您想要做的是通过引用传递CSVHeadEndofHead,以便函数修改传递给它的变量,并且这些更改反映在main()中。您可以将功能更改为

void glowa_csv(csvh &CSVHead, float &EndOfHead)

彻底去掉return语句。