我需要返回两个双打。我知道一些关于传递引用的知识,但我不知道如何使用它来返回multiple。以下是我迄今为止所做的尝试。我制作了两个参考参数,并将其添加到我希望返回两个值的方法中。
#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<double, double>
作为返回类型。例如
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
语句中引用主方法中的min
和max
。在具有minDistance
和maxDistance
的getDistance()
中,您已经为传递给它的替身创建了别名,但这些别名不存在于函数之外!
正如其他人所指出的,除了通过引用传递,还有其他返回2个值的方法。如果你确实想通过引用返回,那么你所写的几乎是正确的。与其在主方法中使用变量"minDistance"one_answers"maxDistance"(尚未声明它们(,不如使用已声明的变量"min"one_answers"max"。此外,您应该使用'<lt;'而不是"+"以在cout调用中附加输出。此外,如果您希望输出显示在单独的行上(而不是一起运行(,则应以'<lt;endl’。最后,正如user4581301所说,"if"语句的主体不包括minDistance和maxDistance。为了同时包含这两个语句,您需要在语句周围使用大括号。
重写代码以将这些变化考虑在内(但不以任何方式确保"计算"的正确性(会得到:
#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;
}