Как мне вернуть несколько значений в функции C ++? - PullRequest
0 голосов
/ 05 августа 2020

Я пишу код и столкнулся с ошибкой, когда мне нужно вернуть несколько значений в main() из другой функции.

Здесь я пытаюсь вернуть item и total в main() функция. Однако я получаю предупреждение о том, что item не использовался, но я использую его в main(), где затем говорится «использование необъявленного идентификатора» вместе с total.

Может кто-нибудь поможет мне с моей проблемой синтаксиса?

int processSelection() {
  cout << "Enter your selection: " << flush;
  int item;
  cin >> item;

  cout << menuItems[item-1] << ": $" << cost[item-1] << " has been added to cart." << endl;

  int total;
  total = 0;
  total = total + cost[item];
  
  return (item, total);
}

int main() {
  cout << "Vending Machine" << endl;
  cout << "----Items------" << endl;

  vendingMachine();
  cout << "Enter 0 to checkout" << endl;

  int selection(item) = processSelection();

  float cost;
  
  while(selection != 0) {

    processSelection();
  } 
  cout << "Proceding to checkout..." << endl;
  cout << "========================" << endl;
  
  cout << "Amount due: " << total << endl;

Отредактированный код: (Я все еще получаю сообщение об ошибке для return std::make_pair(item, total); и p = processSelection();)

int processSelection() {
  cout << "Enter your selection: " << flush;
  int item;
  cin >> item;

  cout << menuItems[item-1] << ": $" << cost[item-1] << " has been added to cart." << endl;

  int total;
  total = 0;
  total = total + cost[item];
  
  return std::make_pair(item, total);

}

int main() {
  cout << "Vending Machine" << endl;
  cout << "----Items------" << endl;

  vendingMachine();
  cout << "Enter 0 to checkout" << endl;

//  int selection() = processSelection();
  std::pair<int, int> p = processSelection();

  float cost;
  
  while(p.first != 0) {

    processSelection();
  } 
  cout << "Proceding to checkout..." << endl;
  cout << "========================" << endl;
  
  cout << "Amount due: " << p.second << endl;

Ответы [ 3 ]

3 голосов
/ 05 августа 2020

Используйте в своем процессе ссылку на выбор https://www.geeksforgeeks.org/returning-multiple-values-from-a-function-using-tuple-and-pair-in-c/ от Майка.

return std::make_pair(item, total);

и вызовите using в своем основном.

std::pair<int, int> p = processSelection();

Тогда вы можете используйте p.first и p.second для доступа к значениям.

А также измените int processSelection () на std :: pair processSelection ()

0 голосов
/ 05 августа 2020

Вы можете просто объявить 'item' и 'total' в основной функции и передать их ссылку на функцию processSelection () следующим образом:

void processSelection(int &item,int &total)
0 голосов
/ 05 августа 2020

Объявлено, что ваша функция возвращает одно int, но затем вы пытаетесь получить return несколько int значений. Это просто не сработает.

Вам нужно изменить функцию, чтобы она возвращала тип, который фактически может содержать несколько значений одновременно, например:

struct ItemTotal {
    int item;
    int total;
};

ItemTotal processSelection() {
    ItemTotal it;
    ...
    it.item = ...;
    it.total = ...;
    ...
    return it;
}

int main() {
    ...
    ItemTotal selection = processSelection();
    // use selection.item and selection.total as needed...
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...