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