C++:如何使用引用传递在方法中返回多个值?

C++:如何使用引用传递在方法中返回多个值?,c++,xcode,pass-by-reference,multiple-return-values,C++,Xcode,Pass By Reference,Multiple Return Values,我要退两双。我对通过引用传递略知一二,但我不知道如何使用它返回多个。这是我到目前为止试过的。我创建了两个参考参数,并将其添加到我希望返回两个值的方法中 #include "stdafx.h" #include <iostream> using namespace std; int main() { double min; double max; getDistance(766, 981, 328, 609, min, max); getDistance(899, 1

我要退两双。我对通过引用传递略知一二,但我不知道如何使用它返回多个。这是我到目前为止试过的。我创建了两个参考参数,并将其添加到我希望返回两个值的方法中

#include "stdafx.h" 
#include <iostream>
using namespace std;
int main() {
  double min;
  double max;
  getDistance(766, 981, 328, 609, min, max);
  getDistance(899, 171, 1009, 282, min, max);
  cout << "Minimum distance is "+minDistance+"inches";
  cout << "Maximum distance is "+maxDistance+"inches";
  return 0;
}

void getDistance(int left, int right, int top, int bottom, double& minDistance, double& maxDistance) {
  int height=bottom - top;
  int width=right - left;
  bool isCNN=width !=height;
  if (isCNN) {
    if (width >=215 && height >=281) minDistance=0;
    maxDistance=14;
    else if (width >=124 && height >=167) minDistance=14;
    maxDistance=33.75;
    else if (width >=76 && height >=111) minDistance=33.75;
    maxDistance=53.5;
    else if (width >=56 && height >=94) minDistance=53.5;
    maxDistance=73.25;
    else if (width >=49 && height >=84) minDistance=73.25;
    maxDistance=93;
    else if (width >=41 && height >=71) minDistance=93;
    maxDistance=112.75;
    else if (width >=28 && height >=57) minDistance=132.5;
    maxDistance=172;
    else if (width >=23 && height >=49) minDistance=191.75;
    maxDistance=270.75;
    else minDistance=270.75;
    maxDistance=480;
  }
  else {
    if (width >=330) minDistance=0;
    maxDistance=6.375;
    else if (width >=238) minDistance=6.375;
    maxDistance=16.25;
    else if (width >=168) minDistance=16.25;
    maxDistance=26.125;
    else if (width >=122) minDistance=26.125;
    maxDistance=36;
    else if (width >=108) minDistance=36;
    maxDistance=55.75;
    else if (width >=91) minDistance=55.75;
    maxDistance=75.5;
    else minDistance=75.5;
    maxDistance=144;
  }
  return;
}
价值观

可以使用std::pair作为返回类型。例如

std::pair<double, double> foo()
{
   return {10, 20};
}

如果您确实希望通过引用传递“返回”两个值:

void foo(int& x, int& y)
{
    x = 55;
    y = 66;
}

int main()
{
    int x = 0;
    int y = 0;
    foo(x, y);
    if (x == 55 && y == 66)
    {
        return 0;
    }
    else
    {
        return 1;
    }
}
像这样的事情应该可以。正如其他人所注意到的,有许多其他方法可以实际返回两个值,但现在您可以开始了


在您提交的代码中,除了语法问题之外,还需要在cout语句的main方法中引用min和max。在带有MindDistance和maxDistance的getDistance中,您已经为传递给它的Double创建了别名,但是这些别名在函数外部不存在

正如其他人所指出的,除了通过引用传递之外,还有其他方法返回2个值。如果您确实希望通过引用返回,那么您所写的内容几乎是正确的。不要在main方法中使用未声明的变量“minDistance”和“maxDistance”,而应该使用已声明的“min”和“max”变量。此外,您应该使用“只传递两个引用”。每个返回值对应一个。您应该显示到目前为止已尝试的内容。如果你不知道如何通过推荐,我建议从a学习。请不要这样做。返回两个值。if和else语句的使用有点不可靠。如果宽度>=215和高度>=281,则距离=0;这就是全部。最大距离=14;在if之外,因此else已断开连接。这会导致一连串错误消息。需要大括号:如果宽度>=215&&height>=281{minDistance=0;maxDistance=14;}
#include <iostream>

int main(int, char**) {
  double min;
  double max;
  getDistance(766, 981, 328, 609, min, max);
  getDistance(899, 171, 1009, 282, min, max);
  std::cout << "Minimum distance is " << min << "inches" << std::endl;
  std::cout << "Maximum distance is " << max << "inches" << std::endl;
  return 0;
}

void getDistance(int left, int right, int top, int bottom, double& minDistance, double& maxDistance) {
  int height = bottom - top;
  int width = right - left;
  bool isCNN = width !=height;

  if (isCNN) {
    if (width >=215 && height >=281) {
      minDistance=0;
      maxDistance=14;
    } else if (width >=124 && height >=167) {
      minDistance=14;
      maxDistance=33.75;
    } else if (width >=76 && height >=111) {
      minDistance=33.75;
     maxDistance=53.5;
    } else if (width >=56 && height >=94) {
      minDistance=53.5;
      maxDistance=73.25;
    } else if (width >=49 && height >=84) {
      minDistance=73.25;
      maxDistance=93;
    } else if (width >=41 && height >=71) {
      minDistance=93;
      maxDistance=112.75;
    } else if (width >=28 && height >=57) {
      minDistance=132.5;
      maxDistance=172;
    } else if (width >=23 && height >=49) {
      minDistance=191.75;
      maxDistance=270.75;
    } else {
      minDistance=270.75;
      maxDistance=480;
    }
  } else {
    if (width >=330) {
      minDistance=0;
      maxDistance=6.375;
    } else if (width >=238) {
      minDistance=6.375;
      maxDistance=16.25;
    } else if (width >=168) {
      minDistance=16.25;
      maxDistance=26.125;
    } else if (width >=122) {
      minDistance=26.125;
      maxDistance=36;
    } else if (width >=108) {
      minDistance=36;
      maxDistance=55.75;
    } else if (width >=91) {
      minDistance=55.75;
      maxDistance=75.5;
    } else {
      minDistance=75.5;
      maxDistance=144;
    }
  }
  return;
}