【发布时间】:2010-11-24 23:18:27
【问题描述】:
我正在学习 C++。我正在尝试做一个练习,我用一个函数定义一个纯虚拟类的几个实现。我在链接使用这些实现的类时遇到问题。
==> 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::vector。
-
旁注2:具有虚函数的类应该有一个虚析构函数。
-
我已经添加了 g++ 标签,因为您的问题是如何让编译器(更准确地说是链接器)链接目标文件,这取决于编译器。