文件结构:
有文件data_type.h以及data_type.cpp,编译成data_type.dll。
有算法模块algo模块编译成obj文件。
有接口文件,利用obj文件编译成interface.dll。
这里面algo和interface的代码都引用了data_type.h。
问题描述:
编译后,链接报错说data_type.h中type1结构体重定义了。
(这个结构体只定义在.h。如果显示的写了构造函数在.cpp,就没有问题)
这个结构体没有显示声明构造函数。
而是隐式的构造函数声明了两次。
问题原因:
type1 声明时,用到了那个导出dll的符号 __declspec(dllexport)。
在编译obj时,以及interface时,都可以看到type1结构体的这个符号。
导致编译器生成默认的构造函数两次。导致重定义的问题。
这里有个原因是 有这个__declspec(dllexport)符号,一定会生成默认的构造函数。
具体解决办法:
写了条件宏。效果是在编译data_type.dll时,使用导出符号。
在编译algo和interface时,看不到.h里面的导出符号。
这样就不会有重定义了。