我遇到了问题。使用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” 我该怎么办?
答案 0 :(得分:7)
这是两个截然不同的问题。关于第一个,在
要使用c
,您需要一个实例; c
除了之外不存在
在一个例子中。如果您将A
的引用传递给您
静态函数,您可以访问该对象中的c
。同
关于第二个:静态数据成员的声明是
就是这样:宣言。你需要一个定义:
B A::b;
在(单个)源文件中。
答案 1 :(得分:4)
非static
成员与类的特定实例相关联,而static
个函数与任何特定实例无关。因此,在static
函数中使用非static
成员是没有意义的:您指的是哪个实例?至于你应该做什么,我不知道。你试图解决的问题是什么?
关于“未解析的外部符号”的消息可能是因为您已声明了 b
。但你没有定义它;你需要将B A::b;
放在外面的类声明中,通常放在你的一个源文件中(不要把它放在头文件中)。