samedi 28 août 2021

Struggling with error message undefined reference to `Fish::Fish(std::string)'

I have this UML Diagram and I have written the code below but I am struggling with an error message

enter image description here

However, while compiling and linking, I got an error

/tmp/cc9oQaPX.o: In function `main':
main.cpp:(.text+0x8c): undefined reference to `Fish::Fish(std::string)'
main.cpp:(.text+0xe5): undefined reference to `Cat::Cat(std::string)'
main.cpp:(.text+0x116): undefined reference to `Fish::Fish()'
main.cpp:(.text+0x158): undefined reference to `Cat::Cat()'
collect2: error: ld returned 1 exit status
#include <iostream>
using namespace std;
class Animal  // define base class 
{
protected:
    int legs;        // base class properties
public:
    Animal(int legNumbers)    // set values of leg
    {
        legNumbers = legs;   // set values of leg 
    }
    virtual void eat() = 0;  // method of base class
    virtual void walk() {}; // method of base class


};
class Pet      // define the pet class 
{
protected:
    string name;       // set properties of pet class 
public: 
    virtual string getName();       // define method
    virtual string setName(string name);    // set name values 
    virtual void play()          // define play method 
    {
        cout << " garfield is playing now." << endl;  // out values 
    }
};
class Spider :public Animal   //child class inherit base class
{
public:
    Spider() :Animal(8)   // spider class inherit animal class
    {
        cout << "animals with " << legs << " legs is walking. " << endl;
    }
    virtual void eat()   // define virtual method
    {
        cout << "spider is eating now. " << endl;
    }
};
class Cat :public Pet, public Animal  // cat inherit two classes 
{
public:
    Cat(string name);   // set name method
    Cat();       
    virtual void play()   // define method
    { 
        cout << name << " is playing now. " << endl;
    }
    virtual void eat();     // define method here

};
class Fish : public  Pet, public Animal  // fish inherit two method
{
public:        // define public members
    Fish(string name);
    Fish();
    virtual void play()
    {
        cout << name << " is playing now. " << endl;
    }
    virtual void eat();   // method here 
    void walk() 
    {
        cout << " Fish cannot walk " << endl;  // output the values 
    }
};

string Pet::getName()   // get name value from parent class
{
    return string();
}

string Pet::setName(string name)
{
    return string();
}
int main(int argc, char* argv[])   // define main method 
{
    Fish* f = new Fish("Jaws");
    Cat* c = new Cat("Tenkir");
    Animal *a = new Fish();
    Animal* e = new Spider();
    Pet* p = new Cat();
    f->play();
    c->play();
    e->eat();
    e->walk();
    a->walk();
    p->play();
    return 0;
}

Aucun commentaire:

Enregistrer un commentaire