c++ - error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'void' (or there is no acceptable conversion) -
i'm not sure problem is. gives me error:
error c2679: binary '<<' : no operator found takes right-hand operand of type 'void' (or there no acceptable conversion)
overloaded << shouldn't giving me error, right?
#ifndef animal_h_ #define animal_h_ #include <iostream> #include <string> using namespace std; static int counter; static int getanimalcount() { return counter; } class animal { protected: string *animaltype; public: virtual void talk() = 0; virtual void move() = 0; string getanimaltype() { return *animaltype; } //problem right here v friend ostream& operator<<(ostream&out, animal& animal) { return out << animal.getanimaltype() << animal.talk() << ", " << animal.move(); }; ~animal() { counter--; animaltype = null; } }; class reptile : public animal { public: reptile() { animaltype = new string("reptile"); }; }; class bird : public animal { public: bird() { animaltype = new string("bird"); }; }; class mammal : public animal{ public: mammal() { animaltype = new string("mammal"); }; }; #endif /* animal_h_ */
virtual void talk() = 0;
specifies function return type void
. means not return anything. same happens when define animal::move
virtual void move() = 0;
.
out << animal.getanimaltype() << animal.talk() << ", " << animal.move();
tries print result of animal.talk()
, result of animal.move()
- neither of exists (remember, neither talk()
nor move()
return value!)
Comments
Post a Comment