2013-06-13 3 views
0

У меня есть функция, которая запрашивает два строковых значения в одной функции и затем возвращает эти две строки. Мне нужно использовать эти два отдельно в другой функции. Как я могу получить доступ к обоим?Как получить два значения istream от функции

Вот функция подсказки:

string othello::get_user_move() const 
{ 
    string column; 
    string row; 

    display_message("Enter Column: "); 
    getline(cin, column); // Take value one. 
    display_message("Enter Row: "); 
    getline(cin, row); //Take value two. 
    return column, row; //return both values. 
} 

Вот код, который пытается использовать его (это происходит от другой игры, которая была дана нам, чтобы изменить и оригинал здесь только хватает одного значения):

void othello::make_human_move() 
{ 
    string move; 

    move = get_user_move(); // Only takes the second value inputted. 
    while (!is_legal(move)) // While loop to check if the combined 
            // column,row space is legal. 
    { 
     display_message("Illegal move.\n"); 
     move = get_user_move(); 
    } 
    make_move(move); // The two values should go into another function make_move 
} 

Большое спасибо за помощь.

ответ

4

Этот

return column, row; 

использует comma operator, оценивая column, выбрасывая результат, и возвращает значение row. Таким образом, ваша функция не возвращает двух значений.

Если вы хотите, чтобы вернуть два значения, вы можете написать на структуру холдинга два значения, или используйте std::pair<std::string, std::string>

#include <utility> // for std::pair, std::make_pair 

std::pair<string, string> othello::get_user_move() const 
{ 
    ... 
    return std::make_pair(column, row); 
} 

затем

std::pair<std::string, std::string> col_row = get_user_move(); 
std::cout << col_row.first << "\n"; // prints column 
std::cout << col_row.second << "\n"; // prints row 
+0

Спасибо, это было очень полезно! – FilT

0

использовать строковый массив строк [], хранить столбец в строку [0] и строку в строку [1] и передать массив строк около

+2

'std :: pair',' std :: vector' или любой другой контейнер, который подчиняется [value semantics] (http://c2.com/cgi/wiki?ValueSemantics), может быть лучшим выбором. –

Смежные вопросы