c ++ undefined ссылка на vtable

Я изучаю C ++. Я пытаюсь выполнить упражнение, в котором я определяю несколько реализаций чистого виртуального класса с помощью одной функции. У меня проблемы с связыванием класса, который использует эти реализации.

==> BasicMath.h <==
#ifndef BASIC_MATH_H
#define BASIC_MATH_H

#include
#include    

class BasicMath { };


#endif // BASIC_MATH_H

==> Operation.h <==

#ifndef OPERATION
#define OPERATION

#include
#include    

class Operation {
 public:
  virtual void perform(std::vector vec) = 0;
};


#endif // OPERATION

==> Sum.h <==
#ifndef SUM_H
#define SUM_H

#include "Operation.h"

class Sum: public Operation {
 public:
  void perform(std::vector vec);
};

#endif // SUM_H

==> BasicMath.cpp <==
#ifndef BASIC_MATH_C
#define BASIC_MATH_C

#include 
#include 
#include 
#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 
#include 
#include 
#include "Sum.h"

void Sum::perform(std::vector vec) {
    using namespace std;
    int total = 0;
    cout << "Total: " << total << "\n";
};

#endif // SUM_C

Компиляция:

$ 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

Я на 95% уверен, что делаю здесь по крайней мере одну глупость - но мой мозг отказывается сказать мне, что именно.

Я видел этот вопрос, но мне не удалось исправить свою проблему.

16
задан Community 23 May 2017 в 12:17
поделиться