我必须编写一个简单的类库。有两个类Element
和Permutation
。
文件元素.h
#ifndef ELEMENT_H
#define ELEMENT_H
class Element
{
public:
virtual ~Element()=0;
virtual bool IsEven()=0;
virtual bool IsNeutral()=0;
};
#endif
文件排列.h
#ifndef PERMUTATION_H
#define PERMUTATION_H
#include "Element.h"
class Permutation: public Element
{
private:
int* numbers;
public:
const int k;
Permutation(const int, int*);
Permutation(const int);
Permutation();
~Permutation();
int NumberOfInversions();
bool IsEven();
bool IsNeutral();
friend Permutation operator+(const Permutation&, const Permutation&);
friend Permutation operator-(const Permutation&);
};
#endif
我有实现类 Permutation 的 Permutation.cpp。类元素是抽象的,所以它没有任何实现的.cpp 文件。所以,我想编写一个使用类 Permutation 的简单测试程序(带有 main)。我应该如何构建我的项目?我在 linux 平台上使用 g++ 编译器。
这是我的 Makefile 不起作用:
all: permutation_test
permutation_test: fuf.o Permutation.o
g++ fuf.o Permutation.o -o permutation_test
fuf.o: fuf.cpp
g++ -c fuf.cpp
Permutation.o: Permutation.cpp
g++ -c Permutation.cpp
clean:
rm -rf *o permuatation_test
(fuf.cpp 包含 main 方法。)
错误:
Permutation.o:在函数«Permutation::Permutation(int, int*)»中:
Permutation.cpp:(.text+0xd):未定义引用«Element::Element( )»
Permutation.o: 在函数 «Permutation::Permutation(int)»:
Permutation.cpp:(.text+0x3c): 未定义引用 «Element::Element()»
Permutation.cpp:(.text+0xac):未定义引用 «Element::~Element()»
Permutation.o: 在函数 «Permutation::Permutation()»:
Permutation.cpp:(.text+0xcd): 未定义引用 «Element::Element()»
Permutation.o :在函数«Permutation::~Permutation()»中:
Permutation.cpp:(.text+0x11e):未定义引用«Element::~Element()»
collect2:错误:ld返回1退出状态
现在可以了。感谢您的回复。我刚刚在 Element 类中用虚拟和删除的构造函数替换了纯虚拟析构函数