文件F1.h是
enum class E { A, B, C };
template<class E> class X {
public: X(const E& y) { self.z = y; }
};
__declspec(dllexport) X<E> foo; // Attempt to declare but not instantiate
文件F1.cpp是
#include <F1.h>
__declspec(dllexport) X<E> foo(E.A); // Attempt to instantiate matching .H declaration
文件F2.cpp是
#include <F1.h>
void f()
{
E z = foo.z; // Attempt to use from declaration without instantiating
}
Visual Studio C++项目P具有F1.cpp和F2.cpp。构建这个项目会给LNK2005错误,F1.obj中的foo已经在F2.obj中定义了。
有没有一种方法可以设置它,使foo从F1.obj导出到P.DLL中,并在F2.cpp中可用,而不是在F2.obj中定义?
1条答案
按热度按时间3zwjbxry1#
在你的例子中有未定义的变量。
下面是一个示例:
F1.h
F1.cpp
F2.cpp
并测试项目main.cpp
输出