在静态函数中使用类成员

时间:2011-05-03 08:37:45

标签: c++

我遇到了问题。使用VS2010。

    class B { }; class C { };

    class A {
         static B b;
         C c;
    public:
         static int foo();
    };

当我尝试在foo中使用 c 时,我收到一个错误,我无法在静态函数中使用非静态成员。当我尝试在foo中使用 b 时,我会收到以下内容: 未解析的外部符号“private:static class B A :: b” 我该怎么办?

2 个答案:

答案 0 :(得分:7)

这是两个截然不同的问题。关于第一个,在 要使用c,您需要一个实例; c除了之外不存在 在一个例子中。如果您将A的引用传递给您 静态函数,您可以访问该对象中的c。同 关于第二个:静态数据成员的声明是 就是这样:宣言。你需要一个定义:

B A::b;

在(单个)源文件中。

答案 1 :(得分:4)

static成员与类的特定实例相关联,而static个函数与任何特定实例无关。因此,在static函数中使用非static成员是没有意义的:您指的是哪个实例?至于你应该做什么,我不知道。你试图解决的问题是什么?

关于“未解析的外部符号”的消息可能是因为您已声明了 b。但你没有定义它;你需要将B A::b;放在外面的类声明中,通常放在你的一个源文件中(不要把它放在头文件中)。