Operator issues with cout

20,815

Solution 1

You must be including a wrong string header. <string.h> and <string> are two completely different standard headers.

#include <string.h> //or in C++ <cstring>

That's for functions of C-style null-terminated char arrays (like strcpy, strcmp etc). cstring reference

#include <string>

That's for std::string. string reference

Solution 2

You are likely missing #include <string>.

Solution 3

Try declaring operator<< as a friend in your class declaration:

struct Package
{
public:
    // Declare {external} function "operator<<" as a friend
    // to give it access to the members.
    friend std::ostream& operator<<(std::ostream&, const Package& p);

protected:
    string name;
    string address;
    double weight;
    double shippingcost;
};

std::ostream&
operator<<(std::ostream& output, const Package& package)
{
    output << "Package Information ---------------";
    output << "Recipient: " << package.name << endl;
    output << "Shipping Cost (including any applicable fees): " << package.shippingcost;
    return output;
}

By the way, it is very bad form to use variable names that have the same name as the data type, excepting different case. This wreaks havoc with search and analysis tools. Also, typos can have some fun side-effects too.

Share:
20,815
BSchlinker
Author by

BSchlinker

Updated on April 30, 2020

Comments

  • BSchlinker
    BSchlinker almost 4 years

    I have a simple package class which is overloaded so I can output package data simply with cout << packagename. I also have two data types, name which is a string and shipping cost with a double.

    protected:
        string name;
        string address;
        double weight;
        double shippingcost;
    

    ostream &operator<<( ostream &output, const Package &package )
    {
        output << "Package Information ---------------";
        output << "Recipient: " << package.name << endl;
        output << "Shipping Cost (including any applicable fees): " << package.shippingcost;
    

    The problem is occurring with the 4th line (output << "Recipient:...). I'm receiving the error "no operator "<<" matches these operands". However, line 5 is fine.

    I'm guessing this has to do with the data type being a string for the package name. Any ideas?