在以下代码中:
class A
{
public:
static void StaticFunction(int variable){ }
void NonStaticFunction() { }
private:
int nonStaticVariable;
};
我需要获得'变量'并在'NonStaticFunction'中使用它
我尝试将'nonStaticVariable'设为静态并将其值赋给'variable',但是我仍然必须在'NonStaticFunction'中使用静态变量,这会引发链接器错误。
Error 2 error LNK2001: unresolved external symbol "public: static unsigned int A::staticVariable" (?staticVariable@A@@2IA)
有没有办法解决它?
答案 0 :(得分:4)
您需要为名称空间范围的静态数据成员添加定义:
int A::nowStaticVariable; // Put an initializer if 0 is not OK for you
但是,如果您的静态函数需要访问非静态数据成员,并且您被迫使该数据成员保持静态以使整个工作正常工作,那就像糟糕的设计一样。考虑重新思考它。
答案 1 :(得分:2)
如果你使nonStaticVariable
静止;即。
static int nonStaticVariable;
你班上的然后你需要为它提供存储(或链接器会抱怨)。这称为定义。通过编写
在源文件中执行此操作int A::nonStaticVariable;
有趣的是,它初始化为零(与C和C ++中未初始化的非静态不同)。
从概念上讲,您需要这样做,因为类A的对象没有实例化静态变量,因为它不是实例级数据成员。
答案 2 :(得分:1)
您不必在静态函数中使用该参数
class A
{
public:
static void StaticFunction(int // you don't need it ){ }
void NonStaticFunction() { }
private:// it can't be static and private ????
static int nonStaticVariable;
};
int A:: nonStaticVariable = 0 ;
void A::StaticFunction(/*int v */){
you can use directly your static variable and if you declared parameter in your function
v= nonStaticVariable;
}