静态函数和非静态变量

时间:2013-05-30 12:36:53

标签: c++ static

在以下代码中:

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)

有没有办法解决它?

3 个答案:

答案 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;

  }