C++ 链接错误LNK2001:未解析的外部符号(Visual Studio 2008)
我有3个链接错误,我无法摆脱 我在类的头文件中定义了一些自己的用户定义类型的静态公共类常量。接下来,我在cpp文件中声明并初始化了类常量。我可以在类本身中使用这些常量。然而,当我尝试在另一个项目中使用常量时,我得到一个链接错误:C++ 链接错误LNK2001:未解析的外部符号(Visual Studio 2008),c++,linker-errors,unresolved-external,lnk2001,C++,Linker Errors,Unresolved External,Lnk2001,我有3个链接错误,我无法摆脱 我在类的头文件中定义了一些自己的用户定义类型的静态公共类常量。接下来,我在cpp文件中声明并初始化了类常量。我可以在类本身中使用这些常量。然而,当我尝试在另一个项目中使用常量时,我得到一个链接错误: error LNK2001: unresolved external symbol "public: static class EFString const CEFMldEreignis::s_typeMelderSteuern" 我不知道这里出了什么问题。有人有主意
error LNK2001: unresolved external symbol "public: static class EFString const CEFMldEreignis::s_typeMelderSteuern"
我不知道这里出了什么问题。有人有主意吗
非常感谢
头文件:
class LIB_EXPORT CEFMldEreignis : public CBusinessObjekt
{
...
public:
static const EFString s_typeMelderSteuern;
...
};
#include "EFMldEreignis.h"
const EFString CEFMldEreignis::s_typeMelderSteuern = _T("S");
cpp文件:
class LIB_EXPORT CEFMldEreignis : public CBusinessObjekt
{
...
public:
static const EFString s_typeMelderSteuern;
...
};
#include "EFMldEreignis.h"
const EFString CEFMldEreignis::s_typeMelderSteuern = _T("S");
我们正在使用VisualStudio2008。 将常数定义的项目作为另一个项目的公共属性中的引用添加,以及在C++属性中附加的目录。 在另一个第三个项目中,我们实际上也声明了一些静态类常量,这些常量在使用它们时不会出现链接错误 链接器命令行(所有选项):
class LIB_EXPORT CEFMldEreignis : public CBusinessObjekt
{
...
public:
static const EFString s_typeMelderSteuern;
...
};
#include "EFMldEreignis.h"
const EFString CEFMldEreignis::s_typeMelderSteuern = _T("S");
(备注:EuroAllgemeineMasken是使用常数的“其他”项目;EuroMelder是定义和声明常数的项目。)
dllexport和dllimport语句有问题。 某些项目共享相同的LIB_导出指令。其定义如下:
#if defined(_USRDLL) || (defined(_AFXDLL) && defined(_AFXEXT))
#define LIB_EXPORT __declspec(dllexport)
#else
#define LIB_EXPORT __declspec(dllimport)
#endif
然而,这似乎并不正确。我们现在为每个项目定义一个单独的指令,如下所示:
#ifdef BUILD_EUROMELDER_DLL
#undef EUROMELDER_EXPORT
#define EUROMELDER_EXPORT __declspec (dllexport)
#else
#undef EUROMELDER_EXPORT
#define EUROMELDER_EXPORT __declspec (dllimport)
#endif
这就解决了问题。如何将.cpp文件(或包含项目的库)链接到“其他”项目?我们使用的是Visual Studio 2008。将常数定义的项目作为另一个项目的公共属性中的引用添加,以及在C++属性中附加的包含目录。如果你是这个意思的话。在另一个第三个项目中,我们实际上也声明了一些静态类常量,这些常量在使用它们时不会出现链接错误。您希望我将命令行选项粘贴为回复吗?比将其他信息发布为回复评论更好的方法是编辑您的问题并将其放在那里。我可以认为它包含有用的信息来诊断您的问题。问题使用链接器命令行选项进行了修改。我不确定这是否适用于MSVC链接器,但对于GCC,LIB的顺序在某些情况下很重要(必须在链接到它们之前看到符号)。也许这有帮助/值得调查。