简体   繁体   中英

No match for “operator<<” in std::operator

#include <iostream>
#include <string>
using namespace std;

// your code
class Dog {
public:
   int age;
   string name, race, voice;

   Dog(int new_age,string new_name,string new_race,string new_voice);
   void PrintInformation();
   void Bark();
};

    Dog::Dog(int new_age,string new_name,string new_race,string new_voice) {
        age = new_age;
        name = new_name;
        race = new_race;
        voice = new_voice;
    }

    void Dog::PrintInformation() {
        cout << "Name: " << name;
        cout << "\nAge: " << age;
        cout << "\nRace: " << race << endl;
    }

    void Dog::Bark(){
        cout << voice << endl;
    }


int main()
{
  Dog buffy(2, "Buffy", "Bulldog", "Hau!!!");
  buffy.PrintInformation();
  cout << "Dog says: " << buffy.Bark();
}

I'm newbie in C++ and I'm unable to figure out the error.I am getting the error at buffy.Bark(),it seems like its unable to print something which returns void.

no match for operator<< in std::operator<< >( &std::cout),((const char )

Either declare member function Bark like

std::string Dog::Bark(){
    return  voice;
}

and call it like

cout << "Dog says: " << buffy.Bark() << endl;

Or do not change the function but call it like

cout << "Dog says: "; 
buffy.Bark();

because the function has return type void.

Or take another dog from the dog kennel.:)

Bark is defined as a void function:

void Dog::Bark(){
    cout << voice << endl;
}

This means that trying to do cout << buffy.Bark() in main is trying to cout a void type variable, which is not possible. It's likely you simply meant buffy.Bark(); , which will already output for you.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM