一个朋友来信说,他在工程中添加了一个数据导出到Excel表的类CSpreadSheet,结果出现了LNK2005的错误。在网上查了一下,发现还不只我这个朋友遇到这个问题,CSDN上也有类似问题:http://topic.csdn.net/t/20050311/09/3842070.html
这个CSpreadSheet.h文件在CodeProject和CodeGuru上都有,其实是这个文件有问题。这个头文件既包括了CSpreadSheet类的定义,还包括这个类的实现,这样所有包含这个头文件的类都有一份这个类的实现,链接的时候自然就出错了。只要工程中有两个以上的地方包含这个头文件就会出现这个错误。解决的办法很简单,建立一个CSpreadSheet.cpp文件,然后在这个文件的开头加上:
#include “stdafx.h”
#include “CSpreadSheet.h”
#include “CSpreadSheet.h”
然后把CSpreadSheet.h中的从”// Open spreadsheet for reading and writing”(含)到”#endif”(不含)之前的语句都剪切到CSpreadSheet.cpp中,也就是将类的声明和实现分离,再将CSpreadSheet.cpp文件加到工程中,这样就可以了。