के लिए अनिर्धारित संदर्भ मैं सी ++ सीख रहा हूं। मैं एक अभ्यास करने की कोशिश कर रहा हूं जहां मैं एक शुद्ध वर्चुअल क्लास के एक कार्यान्वयन के साथ कई कार्यान्वयन को परिभाषित करता हूं। मुझे कक्षा को जोड़ने में परेशानी हो रही है जो इन कार्यान्वयन का उपयोग करती है।सी ++ 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
संकलन:
$ 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% यकीन है - लेकिन मेरे दिमाग मुझे क्या बताने के लिए मना कर रहा है।
मुझे this प्रश्न है लेकिन मेरी समस्या को ठीक करने में कामयाब नहीं रहा है।
साइड नोट: आप निश्चित रूप से मूल्य से नहीं, संदर्भ द्वारा std :: वेक्टर पास करना चाहते हैं। – EboMike
साइड नोट 2: आभासी कार्यों वाले वर्गों में आभासी विनाशक होना चाहिए। – EboMike
मैंने g ++ टैग जोड़ा है, क्योंकि आपकी समस्या ऑब्जेक्ट फ़ाइलों को लिंक करने के लिए कंपाइलर (अधिक सटीक लिंकर) कैसे प्राप्त करें, और यह संकलक निर्भर है। –