c++ 头文件 静态常量初始化 5

我有一个头文件A.h一个源文件A.cppA类有一个静态常量a,我想要初始化staticconstinta=1;这个a我在头文件,cpp文件初始化列表,单独初始化全都报错,... 我有一个头文件A.h 一个源文件A.cpp
A类有一个静态常量a,我想要初始化static const int a = 1;
这个a我在头文件,cpp文件初始化列表,单独初始化全都报错,请问这个a怎么初始化
展开
 我来答
cust_no1
2014-04-07 · TA获得超过115个赞
知道答主
回答量:41
采纳率:100%
帮助的人:21.3万
展开全部
先有一个知识:普通的类的static的变量在.cpp中初始化,即使不初始化运行也不会报错,编译器不会给初值。(指VC)
类的const在.h里面初始化,这个时候const变量是不分配内存的;static不能在.h里面初始化,必须在.cpp,所以你的做法是矛盾的。你想给类定义一个类的静态变量又想使它永远不变,你只需要写const int a = 1;它不分配内存,所以它不是类的成员,static是多余的。
更多追问追答
追问
但这样就不能用类名直接访问该变量了。
我想要A::a直接访问,c++很多自己的写好的类也是这种形式的 如:string::npos
我是想直接类名访问:A::a且不改变a的值
c++很多自己写的类就是这样的,如string::npos
可以叫我表哥
2015-08-28 · 知道合伙人数码行家
可以叫我表哥
知道合伙人数码行家
采纳数:25897 获赞数:1464990
2010年毕业于北京化工大学北方学院计算机科学与技术专业毕业,学士学位,工程电子技术行业4年从业经验。

向TA提问 私信TA
展开全部
#include <iostream>

using namespace std;
class test
{
public:
static int num;
};
int test::num = 0;
void main()
{
cout<<test::num <<endl;
test::num = 20;
cout<<test::num <<endl;
}
通常静态数据成员在类声明中声明,在包含类方法的文件中初始化。初始化时使用作用域操作符来指出静态成员所属的类。但如果静态成员是整型或是枚举型const,则可以在类声明中初始化。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e608075
2014-04-07 · TA获得超过243个赞
知道小有建树答主
回答量:302
采纳率:57%
帮助的人:136万
展开全部
首先,a是类A的数据成员,是不能直接初始化的,必须通过构造函数进行初始化,但C++11标准规定可以为数据成员提供一个类内初始值,所以可以直接在定义时初始化,前提是你的编译器支持11标准
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
弯弯的月神
2014-04-07
知道答主
回答量:20
采纳率:0%
帮助的人:5.1万
展开全部
你可以在头文件里定义好,然把把头文件加在.cpp文件里
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e43033c
2014-04-07 · TA获得超过1130个赞
知道小有建树答主
回答量:933
采纳率:100%
帮助的人:942万
展开全部
//A.h

#include<iostream>
using namespace std;
class A
{
public:
static const int a;
};
const int A::a = 1;
//A.cpp
#include "A.h"
int main()
{
cout << A::a << endl;
cout << "ksks" << endl;
return 0;
}
以上代码在linux下能够编译,并执行,输出结果:
1
ksks
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式