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怎么初始化 展开
A类有一个静态常量a,我想要初始化static const int a = 1;
这个a我在头文件,cpp文件初始化列表,单独初始化全都报错,请问这个a怎么初始化 展开
展开全部
先有一个知识:普通的类的static的变量在.cpp中初始化,即使不初始化运行也不会报错,编译器不会给初值。(指VC)
类的const在.h里面初始化,这个时候const变量是不分配内存的;static不能在.h里面初始化,必须在.cpp,所以你的做法是矛盾的。你想给类定义一个类的静态变量又想使它永远不变,你只需要写const int a = 1;它不分配内存,所以它不是类的成员,static是多余的。
类的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 · 知道合伙人数码行家
可以叫我表哥
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数: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,则可以在类声明中初始化。
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,则可以在类声明中初始化。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先,a是类A的数据成员,是不能直接初始化的,必须通过构造函数进行初始化,但C++11标准规定可以为数据成员提供一个类内初始值,所以可以直接在定义时初始化,前提是你的编译器支持11标准
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你可以在头文件里定义好,然把把头文件加在.cpp文件里
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
//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
#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
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询