class的一个古怪问题,这是怎么回事?

各位大佬来帮一下我这位菜鸟吧!!!!

我在编程时弄了一个class
如下:

struct bowpicture
{
    string a[15];
};

再如此定义:

bowpicture p[21];

再这样赋值:

p[1]={"   |\ "
      "   | \ "
       "  | | "
      "   | /"
      "   |/"};

再输出:

for(int i=0;i<6;i++);
{
      cout<<p[1][i];
}

它就会报错:

190 12  F:\arrow.exe\arrow.cpp  [Error] no match for 'operator[]' (operand types are 'bowpicture' and 'int')

请各路大侠出手相助
告诉我这是怎么回事
我会感谢你们所有人的

4个回答

从报错来看,cout << p[1][i];这句话的第二个中括号的使用,造成了错误.没有与这些操作数匹配的"[]"运算符.
1.p[i][i]这个格式是二维数组的写法,个人猜测题主想打印出的结构体中字符数组内的字符,所以正确的写法应该是
p[1].a[i];,,,这样依旧存在问题,因为cout方法重载的<<,没有重载string的输出.

cout<<p[1][i]; 修改为 cout<<p[1].a[i].c_str();
这一行报错应该就能解决了。其他有报错再贴出来。

benpaodaoren
benpaodaoren 回复qq_43509688: 刚才发的这两种方式都可以换行
一年多之前 回复
benpaodaoren
benpaodaoren 回复qq_43509688: cout<<p[1].a[i].c_str()<<"\n"; cout<<p[1].a[i].c_str()<<endl;
一年多之前 回复
qq_43509688
qq_43509688 这里在问一下怎么换行
一年多之前 回复
qq_43509688
qq_43509688 谢谢,没有报错了,鄙人在此叩头感谢
一年多之前 回复

报错就是说你这个类还没有下标【】这个功能。自定义的类若要使用运算符,是需要运算符重载的,例如赋值,加号、下标等。

结构体中的数组a[]不是string数据类型,p[1]不能直接赋值,必须调用p[1]下的成员数组a,for(..)括号后面不能加分号

qq_43509688
qq_43509688 谢谢
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问