C ++如何在静态库中的命名空间中设置私有类成员?

时间:2014-01-28 05:27:39

标签: c++ class static namespaces private

你好伙计,

我在尝试编写静态库时遇到了问题。我试图用公共类函数设置私有类成员。该类位于命名空间中。当我尝试编译示例程序(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_test_api.proj

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;
    }
}

namepsace_test.proj

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");
}

1 个答案:

答案 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每个全局只需一次。