我从以下网址下载了一个通用的 AVL 实现:http: //sourceforge.net/projects/standardavl/files/standardavl/0.1/
此项目中的 makefile 可以正确编译代码。编译器产生以下输出:
g++ -pedantic -Wall -O3 -c standardavl.cpp -o standardavl.o
g++ -pedantic -Wall -O3 -c Point.cpp -o Point.o
g++ -o standardavl standardavl.o Point.o
g++ -o genpoints genpoints.o Point.o
makefile 只编译“standardavl.cpp”,因为standartavl 包含“AvlTree.h”而该文件包含“AvlTree.cpp”:
标准avl.cpp
#include "AvlTree.h"
#include "Point.h"
(...)
AvlTree.h
(...)
#include "AvlTree.cpp"
在我的项目中,我从文件 AvlTree.h 中删除了最后一行(#include "AvlTree.cpp")并单独编译了这些文件。我也不使用文件“standardavl.cpp”。我将文件 Point.h 更改为 KeyPair.h 并在那里实现了所有运算符。
我的编译器产生以下输出:
g++ -pedantic -Wall -O3 -c -o ../lib/CPUTimer.o ../lib/CPUTimer.cpp -I. -I../lib
g++ -pedantic -Wall -O3 -c -o ../lib/AvlTree.o ../lib/AvlTree.cpp -I. -I../lib
g++ -pedantic -Wall -O3 -c -o ../lib/keypair.o ../lib/keypair.cpp -I. -I../lib
g++ -pedantic -Wall -O3 -c -o graph.o graph.cpp -I. -I../lib
g++ -pedantic -Wall -O3 -c -o dijkstra.o dijkstra.cpp -I. -I../lib
g++ -pedantic -Wall -O3 -o ../../q1 ../lib/CPUTimer.o ../lib/AvlTree.o ../lib/keypair.o graph.o dijkstra.o questao1.cpp -I. -I../lib
dijkstra.o: In function 'Dijkstra::executeAvl(int)':
dijkstra.cpp:(.text+0x25d): undefined reference to 'AvlTree<KeyPair, std::less<KeyPair>, nil<KeyPair> >::AvlTree()'
(... a lot of errors like above ...)
collect2: ld returned 1 exit status
make[1]: ** [q1] Erro 1
我在这里做错了什么?