我如何通过类构造函数访问私有静态成员变量?

时间:2014-04-27 14:10:10

标签: c++ static private

如何使用和修改构造函数中的s_member私有静态变量,或者通常来自其他成员函数?

这就是我的尝试。

A.H:

#ifndef A_H
#define A_H

#include <set>

class A
{
    public:
        A();
        virtual ~A();

    private:
        static std::set<int> s_member;
};

#endif

a.cpp:

#include "a.h"

A::A()
{
    A::s_member.insert(5); // It causes error.
}

我收到此错误:

/tmp/ccBmNUGs.o: In function `A::A()': a.cpp:(.text+0x15): undefined
 reference to `A::s_member' collect2: error: ld returned 1 exit status

2 个答案:

答案 0 :(得分:3)

您已声明A::s_member但尚未定义。要定义它,请在类之外放置以下代码:

std::set<int> A::s_member;

例如:

std::set<int> A::s_member;

A::A()
{
  // ...
}

该问题与访问和private / public无关。

答案 1 :(得分:0)

您必须定义变量

#include "a.h"

std::set<int> A::s_member;

A::A()
{
    A::s_member.insert(5); // It causes error.
}

错误消息中对目标文件ccBmNUGs.o的引用表明它是链接器的错误。 链接器找不到s_member

的定义