为什么需要在类外部定义静态数据成员? [英] Why does a static data member need to be defined outside of the class?

查看:341
本文介绍了为什么需要在类外部定义静态数据成员?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

根据静态数据成员


静态数据成员的声明在类的成员列表中不是定义。您必须在类声明之外的命名空间范围中定义静态成员。

The declaration of a static data member in the member list of a class is not a definition. You must define the static member outside of the class declaration, in namespace scope.

为什么?

推荐答案

这是语言的规则,被称为一个定义规则。在一个程序中,每个静态对象(如果使用)必须定义一次,只能定义一次。

It's a rule of the language, known as the One Definition Rule. Within a program, each static object (if it's used) must be defined once, and only once.

类定义通常放在头文件中,包含在多个翻译单元即从多个源文件)。如果头中的静态对象的声明是一个定义,那么你最终会得到多个定义,每个单元中包含一个头,这将破坏规则。

Class definitions typically go in header files, included in multiple translation units (i.e. from multiple source files). If the static object's declaration in the header were a definition, then you'd end up with multiple definitions, one in each unit that includes the header, which would break the rule. So instead, it's not a definition, and you must provide exactly one definition somewhere else.

原则上,语言可以做它做什么具有内联函数,允许将多个定义合并为单个定义。但它没有,所以我们坚持这个规则。

In principle, the language could do what it does with inline functions, allowing multiple definitions to be consolidated into a single one. But it doesn't, so we're stuck with this rule.

这篇关于为什么需要在类外部定义静态数据成员?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆