问题源自书《C++primer》(第四版·特别版)。

书401页下面注意中写道:

const static 数据成员在类的定义体中初始化时,该数据成员仍必须在类的定义体之外进行定义。

书402页页首写道:

在类内部提供初始化时,成员的定义不必在指定初始值:

参看代码是:

class Account{

...

private:

static const int period = 30;

...

};

类体外的定义:

const int Account::period;

就这里开始,自己写了一个class,类体中提供了const static的初始值,在类的实现文件中定义这个成员是就出现了错误:

类似:

static int const TestClass::m_cnsta_var" (?m_cnsta_var@TestClass@@0HB) already defined in demo_static.obj

但是有一个例子就可以很好的走:

class A { public: A():mem1(2){} int mem1; const static int mem2=4; }; const int A::mem2; int main() { A a; cout<<a.mem1<<endl<<a.mem2<<endl; return 0; }

不过这个例子是在一个文件中。

其实我的疑问就是:

《C++primer》上说的在类体外定义,说的是在类定义体外还是在类的作用域之外?

在类体之外,可以是在实现文件中,但是不行!

在类作用域之外?即就是在main函数所在文件中(在此处就三个文件)。再次编译错误与上面的一样。

那书上的这个是什么意思?不解。。。

转载于:https://www.cnblogs.com/Podevor/archive/2011/06/29/2788088.html

C++ static、const对象声明与定义 问题来源?相关推荐

  1. C++ static、const对象声明与定义

    // //fileName:TestClass.h #pragma once class TestClass { public: TestClass(); TestClass(int n); virt ...

  2. android对象申明,Kotlin中的对象表达式和对象声明的具体使用

    Kotlin的对象表达式与Java中的匿名内部类的主要区别:匿名内部类只能指定一个父类型,但对象表达式可以指定0~N个肤类型. 一.对象表达式 对象表达式的语法格式如下: object [: 0~N个 ...

  3. C++ : 编译单元、声明和定义、头文件作用、防止头文件在同一个编译单元重复引用、static和不具名空间...

    转 自:http://www.cnblogs.com/rocketfan/archive/2009/10/02/1577361.html 1. 编译单元:一个.cc或.cpp文件作为一个编译单元,生成 ...

  4. 《C++ Primer 第五版》第二章(1-4小节)------基本内置类型,初始化和赋值及声明和定义,指针和引用,const和constexpr

    C++ Primer第二章的内容主要介绍了变量和基础类型,包括C++语言定义的基础内置类型.变量的定义及声明.符合类型如指针及引用的介绍和const及常量表达式constexpr的介绍,本次博客也从这 ...

  5. C++ static、const和static const类型成员变量声明及其初始化

    C++ static.const和static const类型成员变量声明及其初始化 const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间. ...

  6. 释放只有声明没有定义的对象,都是耍流氓

    2019独角兽企业重金招聘Python工程师标准>>> defs.h 文件 class CFtBreakInfo; struct struc_file_status {HANDLE ...

  7. typedef,static,const用法

    一.typedef主要功能是定义一个已存在类型的别名,但是和宏并存 宏与typedef区别 1.宏定义只是简单的字符串替换 2.typedef定义的类型是类型的别名,typedef后面是一个整体声明, ...

  8. C/C++头文件与变量的声明和定义

    版权声明:本文为博主转载文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 原文链接:https://blog.csdn.net/mountzf/article/deta ...

  9. C++ static、const和static const 以及它们的初始化

    const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间. static表示的是静态的.类的静态成员函数.静态成员变量是和类相关的,而不是和类的 ...

最新文章

  1. Leetcode 113. 路径总和 II 解题思路及C++实现
  2. Windows XP Embedded 上手指南
  3. Maven构建java项目
  4. java异常_Java线程池「异常处理」正确姿势:有病就得治
  5. 洛谷——P1781 宇宙总统
  6. Windows下Mysql 的安装和卸载
  7. jvm(11)-晚期(运行期)优化
  8. 【log4net】配置文件
  9. win11杜比视界音效怎么打开 window11开启杜比视界音效的步骤方法
  10. 【模板】质数判断(Miller_Rabin)
  11. SQlite数据库的C编程接口(六) 返回值和错误码(Result Codes and Error Codes) ——《Using SQlite》读书笔记
  12. kindlefire刷安卓系统_安卓4.0完美运行 Kindle Fire刷机教程
  13. 计算机三级考点2:管理和运营宽带城域网的关键技术
  14. Java实现熵值法计算_熵值法确定权重的步骤及适用范围
  15. AnimatedIcon
  16. 如何使用“迁移助理”将文件从旧 Mac 移到新Mac?
  17. CLI 什么是 command-line interface
  18. 第五天 01-ftp服务器使用及arp欺骗获取ftp账号密码
  19. zabbix用户和组权限、admin密码的修改
  20. 使用BERT fine-tuning 用于推特情感分析

热门文章

  1. PAT乙级1037 在霍格沃茨找零钱
  2. playframe 项目搭建
  3. SoftWater——SDN+UnderWater系列论文一
  4. npm install 卡住的时候的处理
  5. multipart/form-data
  6. SQL SERVER 使用订阅发布同步数据库(转)
  7. Freemarker中通过request获得contextPath
  8. (转)open gl 实例 demo ---vs2005 环境
  9. netbios 和smb
  10. frontend-maven-plugin插件问题解决