最近尝试编译Weiss的那本数据结构与算法分析(C++版)提供的源代码时,遇到一些问题,特记录如下:
考虑到该书提供的代码是使用模板技术较多,这在提供简洁代码的同时,也给源码的编译带来了一些问题。因而我们在编译这些代码时,一定要按照原书的说明来做些转换。
拿邮电英文版(简称dsaa3e)本上的第31页上的Figure 1.20 MemoryCell相关的代码为例来说明一下。
我们先到作者的网站
http://users.cis.fiu.edu/~weiss/dsaa_c++3/code/
下面下载
Unix tar | gzip版本。
cd ~/下载/
wget http://users.cis.fiu.edu/~weiss/dsaa_c++3/code/CodeUnix.tar.gz
tar zxvf CodeUnix.tar.gz -C/home/taoyx/c++/dsaa3e/
cd /home/taoyx/c++/dsaa3e/
在该目录下面找到我们将要测试的这几个文件
MemoryCell.cp MemoryCell.h TestMemoryCell.cpp
阅读相关代码后,考虑到模板MemoryCell的声明和实现是分离的,在引用时,我们按照dsaa3e上的附录说明(P.567),需要添加如下的MemoryCellExpand.cpp
然后使用如下的命令来进行编译:
g++ -g MemoryCellExpand.cpp TestMemoryCell.cpp -o TestMemoryCell
这样就生成可执行文件TestMemoryCell,下面我们在当前目录运行下,
./TestMemoryCell
这里需要强调的一点是,模板文件仅是定义的模板,而非模板的实例,所以,我们对要用到的模块要进行显示声明,再使用,否则编译就会出错。