C++ 在类外定义静态变量时,为什么需要再次指定数据类型
我一直在解决黑客的问题。我遇到了一个虚拟函数问题,我被要求创建一个名为Student的类。此类必须有一个名为cur\u id(当前id)的int变量。这是课堂C++ 在类外定义静态变量时,为什么需要再次指定数据类型,c++,oop,static,C++,Oop,Static,我一直在解决黑客的问题。我遇到了一个虚拟函数问题,我被要求创建一个名为Student的类。此类必须有一个名为cur\u id(当前id)的int变量。这是课堂 class Student: public Person{ public: static int id; Student(){ cur_id = ++id; } }; int Student::id = 0; 我被要求在创建类的每个新对象时增加cur_id+1。因此,我决定增加
class Student: public Person{
public:
static int id;
Student(){
cur_id = ++id;
}
};
int Student::id = 0;
我被要求在创建类的每个新对象时增加cur_id+1。因此,我决定增加构造函数中的
cur\u id
。如您所见,我已将类中的static int
变量声明为static int id
。然后我想用类外的零来初始化它的值。但是当我试着用Student::id=0
,我无法访问id
变量。我需要再次指定它的数据类型,就像我再次将变量声明为int Student::id=0代码>。原因是什么,为什么我需要两次声明一个静态变量?我知道这是一个新手问题,可能有一个简单的答案,但我无法在其他主题中找到我的答案。提前感谢。第二次您不申报。你定义它。这就是为什么这通常是在实现文件(.cpp)中完成的,而类声明是在头文件(.h)中完成的。这似乎是相关的。您还应该澄清您询问的是什么类型的“为什么”。是关于基本原理,还是关于指出需要它的语言规范的特定部分?@StoryTeller,我想学习需要它的语言规范化。为什么我们要申报两次呢?@OzanYurtsever这是另一个问题。要么你的问题改进它,要么问另一个问题。@OzanYurtsever,看看这里的好答案。细微的挑剔:每个定义都是一个声明;)::Student::id
id声明了两次,定义了一次。但是为什么我们在第二次定义int类型时再次指定它呢?@OzanYurtsever如果您在头文件中声明一个“普通”全局变量(例如extern int i;
),那么您需要它在单个编译单元中定义此变量(通常在单个源文件中,例如,inti=0;
)。声明和定义都需要写入变量的类型。@OzanYurtsever这不是真的。您不能在函数体外部写入var=5;
。在函数体内部,这不是初始化,而是赋值。@OzanYurtsever我看不到任何区别。请告诉我们您的意思。编辑您的问题以提供示例代码。头文件和源文件。静态成员变量和“正常”变量。