在C++中将结构从被调用函数返回到调用函数的适当方法是什么

What is the appropriate manner to return a struct from a called function to a calling function in C++?

本文关键字:函数 调用 是什么 方法 返回 C++ 结构      更新时间:2023-10-16

我有一个函数,它接受两个 int 值,进行一些处理,然后以结构的形式将处理后的值返回给调用函数。

以下是我调用的函数:

auto start_end(){
bool cond = false;
int xd = 0;
int yd = 0;
std::cout<<("Please enter a desired x coordinate")<<std::endl;
std::cin>>xd;
while(std::cin.fail()){
   std::cout<<("That is not a valid integer. Please enter a valid x co-ordinate")<<std::endl;
   std::cin.clear();
   std::cin.ignore(256,'n');
   std::cin>>xd;
   }
   std::cout<<("Please enter a desired y coordinate")<<std::endl;
std::cin>>yd;
while(std::cin.fail()){
   std::cout<<("That is not a valid integer. Please enter a valid y co-ordinate")<<std::endl;
   std::cin.clear();
   std::cin.ignore(256,'n');
   std::cin>>yd;
   }
struct xy{int x_received; int y_received;};
return xy{xd,yd};
}

我们可以看到结构体 xy 在上面的函数 start_end(( 中返回两个值 xd,yd。

以下是我的调用函数:

int main(int argc, const char * argv[]) {
std::cout <<("A-Star-Algorithm for Project 2 obstacle map")<<std::endl;
int x_start = 0;
int y_start = 0;
int init_point = start_end();

return 0;
}

因此,当我尝试将返回值 xd、yd 存储在变量 init_point 中时,出现错误:

No viable conversion from 'xy' to 'int'

由于我收到此错误,我尝试将接收变量编写为 2 - 索引数组:

int init_point[2] = start_end();

当我尝试以这种方式执行此操作时,出现以下错误:

 Array initializer must be an initializer list

我的确切问题:当函数 int main(( 内部调用函数 start_end(( 返回的值 xd 和 yd 时,我必须以什么适当的方式接收它?

您需要

struct移动到start_endmain可以看到的地方:

struct xy { int x; int y; };
xy start_end()
{
    ...
    return { xd, yd };
}
int main()
{
}

然后,您可以为其分配auto或使用类型名称xy

int main()
{
    auto xy1 = start_end();
    xy xy2 = start_end();
}

或者您可以使用 std::pairstd::tuple .

std::tuple让你

松了一口气(现场(

#include <iostream>
#include <tuple>
auto start_end() {
  auto x = 1, y = 2;
  return std::make_tuple(x, y);
}
int main() {
  int x, y;
  std::tie(x, y) = start_end();
  std::cout << x << ' ' << y << std::endl;
}