重载运算符 << 无法正常工作 C++

overload operator<< not working properly c++

我正在尝试正确重载“<<”运算符,但在尝试编译时我总是出错。

下面是我目前的代码:

Sandwich.h:

#ifndef SANDWICH_H_
#define SANDWICH_H_
#include <string>
#include <iosfwd>

class Sandwich
{
    public:
        // Constructors
        Sandwich(std::string name, float price) : name(name), price(price) {}
        Sandwich() : name("Sandwich"), price(0.00) {}

        // Accessor Functions
        std::string getName() const { return name; }
        float getPrice() const { return price; }

        // Other Functions
        friend std::ostream& operator<<(std::ostream& os, const Sandwich& object);
        friend bool operator==(Sandwich &sandwich1, Sandwich &sandwich2);
        friend bool operator!=(Sandwich &sandwich1, Sandwich &sandwich2);
        friend bool operator<(Sandwich &sandwich1, Sandwich &sandwich2);
        friend bool operator>(Sandwich &sandwich1, Sandwich &sandwich2); 
        friend bool operator<=(Sandwich &sandwich1, Sandwich &sandwich2);
        friend bool operator>=(Sandwich &sandwich1, Sandwich &sandwich2);

    private:
        // Data Fields
        std::string name;
        float price;
};
#endif

Sandwich.cpp:

#include "Sandwich.h"
#include <ostream>
using std::ostream;

bool operator==(Sandwich &sandwich1, Sandwich &sandwich2)
{
    if (sandwich1.getName()==sandwich2.getName() && sandwich1.getPrice()==sandwich2.getPrice())
    {
        return true;
    }
    else
    {
        return false;
    }
}

bool operator!=(Sandwich &sandwich1, Sandwich &sandwich2)
{
    if (sandwich1.getName()!=sandwich2.getName() && sandwich1.getPrice()!=sandwich2.getPrice())
    {
        return true;
    }
    else
    {
        return false;
    }
}

bool operator<(Sandwich &sandwich1, Sandwich &sandwich2)
{
    if (sandwich1.getPrice()<sandwich2.getPrice())
    {
        return true;
    }
    else
    {
        return false;
    }
}

bool operator>(Sandwich &sandwich1, Sandwich &sandwich2)
{
    if (sandwich1.getPrice()>sandwich2.getPrice())
    {
        return true;
    }
    else
    {
        return false;
    }
}

bool operator<=(Sandwich &sandwich1, Sandwich &sandwich2)
{
    if (sandwich1.getPrice()<=sandwich2.getPrice())
    {
        return true;
    }
    else
    {
        return false;
    }
}

bool operator>=(Sandwich &sandwich1, Sandwich &sandwich2)
{
    if (sandwich1.getPrice()>=sandwich2.getPrice())
    {
        return true;
    }
    else
    {
        return false;
    }
}

ostream& operator<<(ostream& os, const Sandwich& object)
{
    os << "Sandwich name: " << object.getName << "\nSandwich price: " << object.getPrice << '\n';
    return os;
}

这个 class 最终将成为 4 个子 class 的基础 class。我试图在继续之前确保它能正常工作,但它无法正确编译,我得到的错误是:

Sandwich.cpp: In function ‘std::ostream& operator<<(std::ostream&, const Sandwich&)’:
Sandwich.cpp:86:26: error: no match for ‘operator<<’ (operand types are ‘std::basic_ostream<char>’ and ‘<unresolved overloaded function type>’)
  os << "Sandwich name: " << object.getName << "\nSandwich price: " << object.getPrice << '\n';
                          ^

加上一堆可能的候选人。

不太确定我哪里出错了,我认为我已经适当地重载了运算符。

您实际上需要使用 ()

调用您的方法
os << "Sandwich name: " << object.getName() << "\nSandwich price: " << object.getPrice() << '\n';