如何将函数返回的2个值分成2个不同的变量C ++

时间:2016-02-29 12:06:52

标签: c++ function

返回值的函数是

float calcVelocity(float xacceleration, float yacceleration,sf::Clock clock, float originalDistance){
    sf::Time time = clock.getElapsedTime(); //get current time and store in variable called time
    float xvelocity = xacceleration*time.asSeconds();
    float yvelocity = yacceleration*time.asSeconds();
    while (!(originalDistance + calcDisplacement(yacceleration, clock, originalDistance) <= 0)) {
        time = clock.getElapsedTime(); //get current time and store in variable called time
        xvelocity = xacceleration*time.asSeconds();//Calculates velocity from acceleration and time
        yvelocity = yacceleration*time.asSeconds();
        cout << xvelocity<<endl;//print velocity
        cout << yvelocity << endl;
        system("cls");//clear console
    }
    return xvelocity;
    return yvelocity;
}

然后我希望它们在while循环完成后打印为finalXvelocity = blah和finalYvelocity = blah。在主代码中,当我调用函数并输出结果时,它会将两个值一起打印。例如,finalXvelocity = blahblah。

我在想我可以将返回的值分离到主代码中,然后使用这些值进行打印,但我不知道该怎么做。

由于

2 个答案:

答案 0 :(得分:5)

使用struct

struct velocity
{
    float x_component; /*ToDo - do you really need a float*/
    float y_component;
};

这将是最具扩展性的选择。您可以扩展以提供构造函数和其他细节,例如计算 speed 。也许class更自然,默认情况下数据成员为private

答案 1 :(得分:4)

如果您有多个返回值,那么从C ++ 11开始,您可以将它们作为std :: tuple返回。无需显式声明数据结构。

e.g。

tuple<float,float> calcVelocity(/*parameters*/) {
  // your code
  return make_tuple(xvelocity,yvelocity);
}

在函数外部,您可以通过以下方式访问值:

tuple mytuple = calcVelocity(/*parameters*/);
float xvelocity = get<0>(my_tuple);
float yvelocity = get<1>(my_tuple);

对于pre-C ++ 11,std :: pair也只是2个值的选项。但在这种情况下,struct解决方案更明确。