xcode — C ++: как использовать pass by reference для возврата нескольких значений в метод?

Мне нужно вернуть два двойных. Я немного знаю о передаче по ссылке, но я не уверен, как использовать его, чтобы вернуть несколько. Вот что я пробовал до сих пор. Я сделал два ссылочных параметра и добавил их в метод, который, как я надеялся, вернет два значения.

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

ценности.

-3

Решение

Ты можешь использовать std::pair<double, double> как тип возвращаемого значения. Например.

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

Другие решения

Если вы действительно хотите «вернуть» два значения с передачей по ссылке:

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

Нечто подобное должно делать. Как уже отмечали другие, есть много других способов на самом деле вернуть два значения, но здесь вы идете.

В представленном вами коде (за исключением синтаксиса) вы должны обратиться к min а также max в вашем основном методе в cout заявление. В getDistance() с minDistance а также maxDistanceВы создали псевдонимы переданных ему двойников, но эти псевдонимы не существуют вне функции!

0

Как уже отмечали другие, есть и другие способы возврата 2 значений, кроме передачи по ссылке. Если вы действительно хотите вернуться по ссылке, то, что вы написали, почти правильно. Вместо того чтобы использовать переменные minDistance и maxDistance в методе main (где они не были объявлены), следует использовать переменные min и max, которые вы объявили. Кроме того, вы должны использовать<<вместо «+» для добавления вывода в вызов cout. Кроме того, если вы хотите, чтобы вывод отображался в отдельных строках (а не выполнялся вместе), вам следует завершить строку знаком ‘<< епсИ. Наконец, как сказал пользователь 4581301, тела ваших операторов 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;
}
0
По вопросам рекламы [email protected]