我的函数从文件读取数据并且运行良好,但是当我返回数据时出错了。这就是它的样子:
代码:
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;
}
答案 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
。您想要做的是通过引用传递CSVHead
和EndofHead
,以便该函数修改您传递给它的变量,并将更改反映在main()
中。您可以将功能更改为
void glowa_csv(csvh &CSVHead, float &EndOfHead)
彻底摆脱回归声明。