C++ static、const对象声明与定义 问题来源?
问题源自书《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对象声明与定义 问题来源?相关推荐
- C++ static、const对象声明与定义
// //fileName:TestClass.h #pragma once class TestClass { public: TestClass(); TestClass(int n); virt ...
- android对象申明,Kotlin中的对象表达式和对象声明的具体使用
Kotlin的对象表达式与Java中的匿名内部类的主要区别:匿名内部类只能指定一个父类型,但对象表达式可以指定0~N个肤类型. 一.对象表达式 对象表达式的语法格式如下: object [: 0~N个 ...
- C++ : 编译单元、声明和定义、头文件作用、防止头文件在同一个编译单元重复引用、static和不具名空间...
转 自:http://www.cnblogs.com/rocketfan/archive/2009/10/02/1577361.html 1. 编译单元:一个.cc或.cpp文件作为一个编译单元,生成 ...
- 《C++ Primer 第五版》第二章(1-4小节)------基本内置类型,初始化和赋值及声明和定义,指针和引用,const和constexpr
C++ Primer第二章的内容主要介绍了变量和基础类型,包括C++语言定义的基础内置类型.变量的定义及声明.符合类型如指针及引用的介绍和const及常量表达式constexpr的介绍,本次博客也从这 ...
- C++ static、const和static const类型成员变量声明及其初始化
C++ static.const和static const类型成员变量声明及其初始化 const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间. ...
- 释放只有声明没有定义的对象,都是耍流氓
2019独角兽企业重金招聘Python工程师标准>>> defs.h 文件 class CFtBreakInfo; struct struc_file_status {HANDLE ...
- typedef,static,const用法
一.typedef主要功能是定义一个已存在类型的别名,但是和宏并存 宏与typedef区别 1.宏定义只是简单的字符串替换 2.typedef定义的类型是类型的别名,typedef后面是一个整体声明, ...
- C/C++头文件与变量的声明和定义
版权声明:本文为博主转载文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 原文链接:https://blog.csdn.net/mountzf/article/deta ...
- C++ static、const和static const 以及它们的初始化
const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间. static表示的是静态的.类的静态成员函数.静态成员变量是和类相关的,而不是和类的 ...
最新文章
- Leetcode 113. 路径总和 II 解题思路及C++实现
- Windows XP Embedded 上手指南
- Maven构建java项目
- java异常_Java线程池「异常处理」正确姿势:有病就得治
- 洛谷——P1781 宇宙总统
- Windows下Mysql 的安装和卸载
- jvm(11)-晚期(运行期)优化
- 【log4net】配置文件
- win11杜比视界音效怎么打开 window11开启杜比视界音效的步骤方法
- 【模板】质数判断(Miller_Rabin)
- SQlite数据库的C编程接口(六) 返回值和错误码(Result Codes and Error Codes) ——《Using SQlite》读书笔记
- kindlefire刷安卓系统_安卓4.0完美运行 Kindle Fire刷机教程
- 计算机三级考点2:管理和运营宽带城域网的关键技术
- Java实现熵值法计算_熵值法确定权重的步骤及适用范围
- AnimatedIcon
- 如何使用“迁移助理”将文件从旧 Mac 移到新Mac?
- CLI 什么是 command-line interface
- 第五天 01-ftp服务器使用及arp欺骗获取ftp账号密码
- zabbix用户和组权限、admin密码的修改
- 使用BERT fine-tuning 用于推特情感分析