C++: Undefined symbols for architecture x86_64

c++

Solution

You need to compile and link `Animal.cpp` and `main.cpp` together, for example:

gcc main.cpp Animal.cpp

It looks like you are not linking against `Animal.o` (which the above command would do).

P.S. You also need to declare the default constructor that you are defining in `Animal.cpp`:

class Animal{
    public:
        Animal(); // <=== ADD THIS
        int getRace();
    private:
        int race;
};

Problem

I have read most of the other posts with this title, but I could not find a solution. I have three files (I know the whole program doesn't make any sense, it is just for test purposes): main.cpp ``` #include "Animal.h" Animal ape; int main(int argc, char *argv[]){ ape.getRace(); return 0; } ``` Animal.h ``` class Animal{ public: int getRace(); private: int race; }; ``` Animal.cpp ``` #include "Animal.h" Animal::Animal(){ race = 0; } int Animal::getRace(){ race = 2; return race; } ``` When I run the main.cpp file I get this error: ``` Undefined symbols for architecture x86_64: "Animal::getRace()", referenced from: _main in main-oTHqe4.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) [Finished in 0.1s with exit code 1] ``` What is wrong here?

Original source