我的问题与这个问题非常相似:DLL中的类有一个静态成员。在这种情况下,静态成员是QString类型(QT 类型)并为类提供名称。我提供了类级别的正常导出:__declspec(dllexport)
.
当我将 DLL 与我的类链接到另一个项目并尝试编译它时,我收到静态数据的“未解析的外部符号”错误。我验证了两件事:
- Dumpbin肯定会报告编译后的 DLL 要导出的静态数据成员。
- 实际上,报告错误的应用程序中似乎没有使用静态数据成员。
DLL 中的 HEADER 文件 (.h) 为:
class __declspec(dllexport) MyClass {
public:
virtual ~MyClass();
static const QString JUST_A_NAME;
};
DLL 中的实现文件 (.cpp) 是:
#include "MyClass.h"
MyClass::~MyClass() { }
const QString MyClass::JUST_A_NAME("call_me_al");
与已经提到的帖子相比,我避免了内联方法,例如实现显然不在标题中。类型QString(参见第 83 行 ff.)本身包含几个内联。这会导致错误吗?
编辑:我在我的应用程序的标题中添加了一个导入语句。它位于任何包含之前。 APPLICATION 中的 HEADER 文件 (.h) 为:
class __declspec(dllimport) MyClass {
public:
virtual ~MyClass();
static const QString JUST_A_NAME;
};
错误保持不变:
error LNK2001: non resolved external symbol ""public: static class QString const MyClass::JUST_A_NAME" (?JUST_A_NAME@MyClass@@2VQString@@B)". <name of .obj file from application>