Ich lerne C++. Ich versuche eine Übung zu machen, bei der ich mehrere Implementierungen einer reinen virtuellen Klasse mit einer einzigen Funktion definiere. Ich habe Probleme beim Verknüpfen der Klasse, die diese Implementierungen verwendet.C++ undefined Verweis auf vtable
==> 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
Ich bin 95% sicher, dass ich zumindest eine dumme Sache hier zu tun - aber mein Gehirn weigert sich, mir zu sagen, was.
Ich habe this Frage gesehen, aber es ist mir nicht gelungen, mein Problem zu beheben.
Seitennotiz: Sie möchten auf jeden Fall einen Std :: Vector als Referenz übergeben, nicht nach Wert. – EboMike
Randnotiz 2: Klassen mit virtuellen Funktionen sollten einen virtuellen Destruktor haben. – EboMike
Ich habe das g ++ -Tag hinzugefügt, da Ihr Problem darin besteht, wie man den Compiler (genauer Linker) zum Verknüpfen von Objektdateien bekommt, und das ist Compiler-abhängig. –