没有运算符“<<”与这些操作数匹配 - C++

1 c++

我对 C++ 相当陌生,正在开始我的主要大学项目。到目前为止一切都很顺利,但是我遇到了这个问题,经过几个小时的网络搜索后我仍然一无所知。

Portfolio::displayAccounts()当我尝试循环遍历向量以显示向量内的每个元素时,就会出现问题。

它不允许我使用std::cout <<我一直用于数组之类的东西的典型值。

任何帮助将不胜感激。

#include <vector>
#include "Account.h"


class Portfolio
{
private:
    std::vector<Account> accounts;

public:
    double calculateNetWorth();
    Portfolio();
    void addAccount(std::string name, double balance);
    void displayAccounts();
};
Run Code Online (Sandbox Code Playgroud)
#include "Account.h"

double Account::getBalance() {
    return balance;
}

Account::Account(std::string name, double balance){
    this->name = name;
    this->balance = balance;
}
Run Code Online (Sandbox Code Playgroud)
#include <string>
class Account
{
private:
    std::string name;
    double balance;
public: 
    double getBalance();
    Account(std::string name, double balance);
};
Run Code Online (Sandbox Code Playgroud)
#include <iostream>
#include <string>

double Portfolio::calculateNetWorth() {
    double total = 0;
    for (auto& account : accounts) {
        total += account.getBalance();
    }
    return total;
}

Portfolio::Portfolio() {    

}

void Portfolio::addAccount(std::string name, double balance) {
    std::cout << "Account Name: ";
    std::cin >> name;
    std::cout << "Account Balance: ";
    std::cin >> balance;
    Account account = Account(name, balance);
    accounts.push_back(account);
}


void Portfolio::displayAccounts() {
    std::cout << "nThe vector elements after push back are: ";
    for (int i = 0; i < accounts.size(); i++) {
        std::cout << accounts[i] << " ";
    }    
}
Run Code Online (Sandbox Code Playgroud)

Jab*_*cky 5

Account标准库不知道应该如何输出类的实例。为了能够写这样的东西:

std::cout << some_account;
Run Code Online (Sandbox Code Playgroud)

您需要重载该<<运算符,例如如下所示:

class Account
{
private:
  std::string name;
  double balance;
public:
  double getBalance();
  Account(std::string name, double balance);

  // add this so the overloaded << operator can access your private members
  friend std::ostream& operator<<(std::ostream& os, const Account& o);
};

// Implementation

std::ostream& operator<<(std::ostream& os, const Account& a)
{
  os << "Name: " << a.name << "  Balance: " << a.balance << "\n";
  return os;
}
Run Code Online (Sandbox Code Playgroud)

例如将打印类似这样的内容Account

Name: SomeName Balance: 123.45678

奖金:

如果你使用 C++11,你可以这样写:

  for (auto & account : accounts)
    std::cout << account << " ";
Run Code Online (Sandbox Code Playgroud)

代替:

  for (int i = 0; i < accounts.size(); i++) {
    std::cout << accounts[i] << " ";
Run Code Online (Sandbox Code Playgroud)