在类中如何给字符数组成员初始化呢

hanerqiang 2012-04-18 01:38:49
在类中如何给数组成员初始化呢

#include<iostream>
using namespace std;
class A
{
public:
A():a("hello"){}

private:
char a[20];
};



这样为什么不行呢
...全文
507 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
良公 2012-04-18
  • 打赏
  • 举报
回复
strcpy(char *,const char *)好东西
  • 打赏
  • 举报
回复
6楼的方法在VS2008的编译器下是不行的,没法通过编译的,在VS2010的编译器下是否能通过没试过。给类中的数组成员初始化可以在构造函数的函数体中进行初始化:

A():a("hello"){}
这样给a初始化相当于让a指向了常量数据区,而数组a是个常量指针,也就相当于a是一个char *const a;a是不能改变它的指向的,但可以改变a所指向的内容.


#include<iostream>
using namespace std;
class A
{
public:
A()
{strcpy(a,"hello");}

private:
char a[20];
};


enjolras 2012-04-18
  • 打赏
  • 举报
回复
一楼是对的,换个新点的编译器就可以照六楼那样了。
参http://blog.csdn.net/zzulp/article/details/6580891
第3条。
帅得不敢出门 2012-04-18
  • 打赏
  • 举报
回复

cat main.cpp
#include <cstdio>
#include <iostream>
#include <cstdlib>
using namespace std;

class A
{
public:
A():a({0x30, 0x32, 0x33}){}

//private:
public:
char a[20];
};

int main()
{
A t;
cout << t.a[1] << endl;
return 0;
}

g++ main.cpp -std=c++0x
x@linux-008:~/test/test> ./a.out
2
JackPan 2012-04-18
  • 打赏
  • 举报
回复
这个错误就好比:
char a[20]
a = "hello";
自己看可以吗?

初始化可以在构造函数里写啊,构造函数就是用来给你了初始化的。
zyrr159487 2012-04-18
  • 打赏
  • 举报
回复
a是数组名,代码数组首地址,是常量,不能被赋值和修改,可以修改的是它所指向的内存
Cai菜 2012-04-18
  • 打赏
  • 举报
回复

A(){strcpy(a,"Hello");}

不过有些偏离题意。
冰与火 2012-04-18
  • 打赏
  • 举报
回复
char*a="hello";//这是把指针a指向一个存有“hello”的常量内存区
char a[20];
a = "hello";//错在a是个常量指针,不能改变它所指向的区域
具体参考这个http://topic.csdn.net/u/20120328/17/286602b3-a08e-4c8d-96e8-981fd858fa7f.html我的回答
你想赋值,就写一个具体的构造函数呗,要不就不用字符数组,你用string,这个方便安全,地球人都推荐。当你想用char*型字符串时,你可以使用它的成员函数
string str;
char a*=str.c_str();
evencoming 2012-04-18
  • 打赏
  • 举报
回复
语法规定。。
等c++11.或者开c++0x。
可以满足你的。

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧