你好伙计,
我在尝试编写静态库时遇到了问题。我试图用公共类函数设置私有类成员。该类位于命名空间中。当我尝试编译示例程序(namespace_test)时,我得到一个LNK2001错误,说明未解析的外部符号。
(Fehler 1错误LNK2001:Nichtaufgelöstesexternes符号“”private:static bool ns_test :: CTest :: m_bPrivateMember“(?m_bPrivateMember @ CTest @ ns_test @@ 0_NA)”。... \ ns_test \ namespace_test \ namespace_test_api。 lib(CTest.obj)namespace_test )
我如何正确实现该功能?
这是我的代码:
namespace.h
namespace ns_test
{
class CTest
{
public:
CTest();
~CTest();
static void SetPrivateMember(bool i_bPrivateMember);
static bool bGetPrivateMember();
private:
static bool m_bPrivateMember;
};
}
CTest.cpp
#include "namespace.h"
namespace ns_test
{
CTest::CTest()
{
}
CTest::~CTest()
{
}
void CTest::SetPrivateMember(bool i_bPrivateMember)
{
CTest::m_bPrivateMember = i_bPrivateMember;
}
bool CTest::bGetPrivateMember()
{
return CTest::m_bPrivateMember;
}
}
namspace.h
namespace ns_test
{
class CTest
{
public:
CTest();
~CTest();
static void SetPrivateMember(bool i_bPrivateMember);
static bool bGetPrivateMember();
private:
static bool m_bPrivateMember;
};
}
的main.cpp
#include <Windows.h>
#include <iostream>
#include "namespace.h"
#pragma comment (lib, "namespace_test_api.lib")
int main()
{
ns_test::CTest::SetPrivateMember(true);
std::cout << "PrivateMember: " << ns_test::CTest::bGetPrivateMember() << std::endl;
system("pause");
}
答案 0 :(得分:2)
在CTest.cpp中,您需要添加以下行:
bool ns_test::CTest::m_bPrivateMember;
这个defines
静态成员,类中的条目只有declares
它。
请注意,以上内容会使用false
对其进行初始化。您可能希望明确说明,或true
:
bool ns_test::CTest::m_bPrivateMember = true;
请注意,这是One Definition Rule的示例:您需要define
每个全局只需一次。