不可以滴!!
因为在B中,如果没有了带*的那一行,那么仅仅只是代表 有存在一个存放A类型数组:as[i],但是里面每个元素到底存放什么我们是不知道的,在JAVA里面,就是引用为空的意思,既as[i] = null。就是说里面其实是没有任何东西的,仅仅只有一个定义而已,那怎么可以指向A类里面的a属性呢?因为as[i]指向的东西都为空,空就是代表没有任何东西,那么里面自然也不会有a这个属性咯。所以我们在声明完数组的时候,必须把数组里面的元素也申明了。但是为什么C可以呢。
你看C是这样做的:
C先声明了一个数组,所以只要存在C的实例,就可以使用到这个数组。虽然这时候,数组里面的元素是为空的,但是你在主程序里面使用了c.s[1]="3",意思就是为c实例里面的数组的第2个元素给申明了,而不是直接引用,这与B是不同的。
——————————————————————————————————————————————————————
B-->不为空,所以可以使用B里面的元素,既as数组,但是as数组里面的元素是空的,所以不存在里面有某种属性的说法,自然是不可是使用A类里面的元素a咯。
C--》不为空,所以可以使用C里面的元素s数组,然后对s数组进行操作。
祝你好运!!希望你能够理解
med[10]={"x","x","x","x","x","x","x","x","x","x"};这样的赋值只有在定义数组的时候同时初始化才可以。
比如 string med[10]={"x","x","x","x","x","x","x","x","x","x"};。
对于类成员,早被定义了,所以这样赋值是非法的。
不过
用
for (int i=0;i<10;i++)。
med[i]="x";
这种方法应该是可行的
验证程序
#include <iostream>。
#include <string>。
using namespace std;。
int main()
string a[3] ;
for(int i = 0; i < 3; i ++)。
a[i] = "x";
for(int i = 0; i < 3; i ++)。
cout << i << ": " << a[i] << endl;。
return 0;
输出
0: x
1: x
2: x
你说的没赋值成功是怎么知道的?应该是其他地方有问题。
你可以在赋值后,把med[i]的值打出来,应该是可以的。
因为
string
str;
的size大小未知,不能这样初始化。
只有struct的size已知的情况下才能这样初始化或者赋值。
string的定义typedef。
basic_string
string;
aa.str="abc";
我编译了没错,我想你出错的不是这句话,而是整个程序中什么地方少了一个{ 或者是 }。
你还是把整个程序贴上来把
unexpected token(s) preceding '{'; skipping apparent function body 。
意思是:
在 { 之前有个不合法的短语,跳过函数体。
是的,初始化是为了分配内存
分配空间后,才可以赋值处理。
原文地址:http://www.qianchusai.com/string%E6%95%B0%E7%BB%84%E5%88%9D%E5%A7%8B%E5%8C%96.html