C++静态成员二维数组的初始化问题

c.h:classc{public:staticchararr[255][16];}charc::arr[255][16]={0};这样初始化二维数组报错。c.h:cla... c.h:

class c

{
public:
static char arr[255][16];

}
char c::arr[255][16]={0};
这样初始化二维数组报错。
c.h:
class c
{
public:
static char arr[255][16];
}

c.cpp

char c::arr[255][16]={0};
这样不报错。为什么?请高手解答。
初始化放在.h中报错,放在cpp文件中不报错,这是为什么
展开
 我来答
德克and德华

推荐于2016-03-13 · TA获得超过2650个赞
知道小有建树答主
回答量:1207
采纳率:100%
帮助的人:630万
展开全部
static成员的初始化一般是在方法文件(.cpp文件)中,而不是在头文件中,因为程序可能将头文件包括在其他几个文件中。
如果在头文件中进行初始化,将出现多个初始化语句副本,从而引发错误。

以上基本是C++ Primer Plus的原话,实际上,在我用过的两个编译器中,即使这个头文件只被包括到一个文件中,也会报错,原因不详,所以最好还是把初始化语句放在方法文件(.cpp文件)里。
填空还是选择
推荐于2018-04-12 · TA获得超过945个赞
知道小有建树答主
回答量:520
采纳率:100%
帮助的人:410万
展开全部
你这是啥?
class c
{
public:
static char arr[255][16];
};//你这里少个分号
char c::arr[255][16]={0};这样没有问题啊

静态数据成员实际上是类域中的全局变量。而全局变量的定义不应该在头文件中,所以,静态数据成员的定义(初始化)不应该被放在头文件中。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
情依梦旧不能圆
2013-03-26 · 超过14用户采纳过TA的回答
知道答主
回答量:34
采纳率:100%
帮助的人:19.7万
展开全部
别这么初始化,一般是用 memset(arr,0,sizeof(arr)); 初始化数组的。
你的提问应该改成:char c::arr[255][16] = {{0}}; 你试一下吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式