Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 静态函数与非静态变量_C++_Static - Fatal编程技术网

C++ 静态函数与非静态变量

C++ 静态函数与非静态变量,c++,static,C++,Static,在以下代码中: class A { public: static void StaticFunction(int variable){ } void NonStaticFunction() { } private: int nonStaticVariable; }; 我需要得到一个“变量”并在“非静态函数”中使用它 我曾尝试将“nonStaticVariable”设置为静态,并将其值赋给“variable”,但我仍然必须在“NonStaticFunction”中使用静

在以下代码中:

class A
{
public:
    static void StaticFunction(int variable){ }
    void NonStaticFunction() { }

private:
    int nonStaticVariable;
};
我需要得到一个“变量”并在“非静态函数”中使用它

我曾尝试将“nonStaticVariable”设置为静态,并将其值赋给“variable”,但我仍然必须在“NonStaticFunction”中使用静态变量,这会引发链接器错误

Error   2   error LNK2001: unresolved external symbol "public: static unsigned int A::staticVariable" (?staticVariable@A@@2IA)
有没有办法解决这个问题?

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

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

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

< P>如果你制作<代码>非静态变量< /代码>静态;i、 e

static int nonStaticVariable;
在你的类中,你需要为它提供存储空间(否则链接器会抱怨)。这就是所谓的定义。在源文件中通过写入

int A::nonStaticVariable;
有趣的是,这是初始化为零(不像非静力学C和C++中没有初始化)。
从概念上讲,您需要这样做,因为没有类A的对象实例化静态变量,因为它不是实例级数据成员。

您不必在静态函数中使用参数

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;

  }

我不确定你在这里想要实现什么。。。您需要为类的所有实例设置一些数据,并且需要在(非静态)成员函数中使用这些数据?错误不是因为您在非静态函数中使用静态变量,而是因为您必须定义(即,告诉编译器为其分配内存,而不是声明它)通过添加
inta::staticVariable来创建静态变量代码中的某个地方。@ NeMeX,WinAPI是C,不是C++。在这种情况下,可以预料互操作代码可能会很难看。