Вектор не возвращается к главной функции [дубликат]

Это сработало для меня.

sudo apt-get install php-curl
15
задан 7 revs, 6 users 57% 9 November 2009 в 08:31
поделиться

4 ответа

Поскольку вы используете C ++, если вы хотите изменить xc и yc, вы можете использовать ссылки:

void trans(double x, double y, double theta, double& m, double& n)
{
    m=cos(theta)*x+sin(theta)*y;
    n=-sin(theta)*x+cos(theta)*y;
}

int main()
{
    // ... 
    // no special decoration required for xc and yc when using references
    trans(center_x, center_y, angle, xc, yc);
    // ...
}

Если вы используете C, вам нужно будет пройти явные указатели или адреса, такие как:

void trans(double x, double y, double theta, double* m, double* n)
{
    *m=cos(theta)*x+sin(theta)*y;
    *n=-sin(theta)*x+cos(theta)*y;
}

int main()
{
    /* ... */
    /* have to use an ampersand to explicitly pass address */
    trans(center_x, center_y, angle, &xc, &yc);
    /* ... */
}

Я бы рекомендовал проверить запись C ++ FAQ Lite в ссылках для получения дополнительной информации о том, как правильно использовать ссылки.

32
ответ дан seaotternerd 26 August 2018 в 16:20
поделиться

Передача по ссылке действительно является правильным ответом, однако C ++ sort-to позволяет возвращать многозначные значения с использованием std::tuple и (для двух значений) std::pair:

#include <cmath>
#include <tuple>

using std::cos; using std::sin;
using std::make_tuple; using std::tuple;

tuple<double, double> trans(double x, double y, double theta)
{
    double m = cos(theta)*x + sin(theta)*y;
    double n = -sin(theta)*x + cos(theta)*y;
    return make_tuple(m, n);
}

Таким образом, вам вообще не нужно использовать out-parameters.

На стороне вызывающего абонента вы можете использовать std::tie для распаковки кортежа в другие переменные:

using std::tie;

double xc, yc;
tie(xc, yc) = trans(1, 1, M_PI);
// Use xc and yc from here on

Hope это помогает!

7
ответ дан Michael Price 26 August 2018 в 16:20
поделиться

Вам нужно передать свои переменные по ссылке, что означает

void trans(double x,double y,double theta,double &m,double &n) { ... }
1
ответ дан Soufiane Hassou 26 August 2018 в 16:20
поделиться

, как сказано выше, вам нужно передать по ссылке, чтобы вернуть измененные значения «m» и «n», но ... рассмотреть возможность передачи всего по ссылке и использовать const для параметров, которые вы не хотите изменять внутри ваша функция, т.е.

void trans(const double& x, const double& y,const double& theta, double& m,double& n)
0
ответ дан timB33 26 August 2018 в 16:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: