2016-02-29 56 views
1

功能2倍的值是這個如何分離的函數返回到返回值2個不同的變量,C++

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 =胡說和finalYvelocity =胡說是完成的。在我調用函數並輸出結果的主代碼中,它將兩個值一起打印出來。例如,finalXvelocity = blahblah。

我想我可以分開返回到主代碼的值,然後使用這些打印出來,但我不知道該怎麼做。

感謝

+0

['std :: pair'](http://en.cppreference.com/w/cpp/utility/pair)(via ['std :: make_pair()'](http://en.cppreference的.com /瓦特/ CPP /效用/對/ make_pair))。 – BoBTFish

+1

@BoBTFish:把它寫成答案! –

回答

4

如果你有多個返回值,從C++ 11開始,你可以將它們作爲std :: tuple返回。不需要顯式聲明一個數據結構。

例如

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

對於預C++ 11的std ::一對也是隻有2值的選項。但在這種情況下,結構解決方案更加明確。

+0

加一個,這是一個很好的答案,雖然我會承認我認爲'std :: tuple'是一個縮小版的魔鬼。 – Bathsheba

5

使用struct

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

這將是最具擴展性的選擇。您可以擴展以提供構造函數和其他細節,例如計算速度。也許class更自然,其中數據成員默認爲private

+1

我有一個反對聲明它是私人成員,制定者和獲得者的類。它相當於你的答案中的結構,但有很多樣板代碼假裝是一個很好的面向對象的設計。這種數據結構的構造函數從C++ 11開始支持初始化是無用的。 – lisyarus