c++ undefined reference to vtable

c++, g++

Solution

You're not including the Sum.o object file on your compile&link line (second g++ use).

Problem

I'm learning C++. I'm trying to do an exercise where I define several implementations of a pure virtual class with a single function. I'm having trouble linking the class that uses these implementations. ``` ==> BasicMath.h <== #ifndef BASIC_MATH_H #define BASIC_MATH_H #include<string> #include<vector> class BasicMath { }; #endif // BASIC_MATH_H ==> Operation.h <== #ifndef OPERATION #define OPERATION #include<string> #include<vector> class Operation { public: virtual void perform(std::vector<std::string> vec) = 0; }; #endif // OPERATION ==> Sum.h <== #ifndef SUM_H #define SUM_H #include "Operation.h" class Sum: public Operation { public: void perform(std::vector<std::string> vec); }; #endif // SUM_H ==> BasicMath.cpp <== #ifndef BASIC_MATH_C #define BASIC_MATH_C #include <string> #include <vector> #include <iostream> #include "BasicMath.h" #include "Sum.h" int main(int argc, char* argv[]) { Sum op; } #endif // BASIC_MATH_C ==> Sum.cpp <== #ifndef SUM_C #define SUM_C #include <vector> #include <string> #include <iostream> #include "Sum.h" void Sum::perform(std::vector<std::string> vec) { using namespace std; int total = 0; cout << "Total: " << total << "\n"; }; #endif // SUM_C ``` Compilation: ``` $ g++ -c Sum.cpp $ g++ -o BasicMath BasicMath.cpp /tmp/cc1VXjNl.o:BasicMath.cpp:(.text$_ZN3SumC1Ev[Sum::Sum()]+0x16): undefined reference to `vtable for Sum' collect2: ld returned 1 exit status ``` I'm 95% sure I'm doing at least one foolish thing here - but my brain is refusing to tell me what. I have see this question but have not managed to fix my issue.

Original source

Related problems