-1

在以下代码中:

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)

有没有办法解决它?

4

3 回答 3

4

您需要在命名空间范围内为您的静态数据成员添加定义

int A::nowStaticVariable; // Put an initializer if 0 is not OK for you

但是,如果您的静态函数需要访问非静态数据成员,并且您被迫将该数据成员设为静态以使整个工作正常,那么这闻起来像是糟糕的设计。考虑重新考虑。

于 2013-05-30T12:38:40.907 回答
2

如果你做nonStaticVariable静态; IE

static int nonStaticVariable;

在您的班级中,您需要为其提供存储空间(否则链接器会抱怨)。这称为定义。通过编写在源文件中执行此操作

int A::nonStaticVariable;

有趣的是,这被初始化为零(与未初始化的 C 和 C++ 中的非静态变量不同)。

从概念上讲,您需要这样做,因为 A 类的任何对象都不会实例化静态变量,因为它不是实例级数据成员。

于 2013-05-30T12:39:05.410 回答
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;

  }
于 2013-05-30T12:51:41.800 回答