Chinaunix

标题: list容器能存放结构体对象吗? [打印本页]

作者: 小蟹子    时间: 2007-04-09 15:35
标题: list容器能存放结构体对象吗?
我写了一个简单的程序来测试,结果出现了,错误,请各位大侠指点。
错误信息时说我没有实现拷贝构造函数。
不知道结构体是不是也需要些拷贝构造函数,该怎么写?
#include <iostream>
#include <list>
using namespace std;
struct Node
{
        int a;
        char b;
};
int main(){
list<Node> node;
list<Node>::iterator pN;

        Node node1={24,'a'};
        Node node2={24,'b'};
        Node node3={24,'c'};
        node.push_back(node1);
        node.push_back(node2);
        node.push_back(node3);
        while(p=node.begin()&&p!=node.end())
       {
                //cout<< *p->b <<endl;
        }
return 0;
}
作者: tyc611    时间: 2007-04-09 15:45
for(p=node.begin(); p!=node.end(); p++)
{
        cout<< p->b << endl;
}

另外,结构体也是类,struct与class的区别仅在于其成员默认是public,而class是private
如果仅是遍历容器成员不修改的话,用const迭代器好,养成好的习惯
你的程序中没必要定义三个Node变量,定义一个,然后重复使用,或者干脆不定义,直接在push时创建

关于程序有错时,自己试着分析揭示的错误&&查帮助,特别是这儿明显的语法错误
作者: tyc611    时间: 2007-04-09 15:52
对了,补充一点,结构体的显式初始化(就是你用的那种方法)虽然可以使用,这是C++为了兼容C,所以允许。其使用前提是struct没有定义构造函数且全体数据成员是public成员。
建议还是定义构造函数,按照类的方法来使用
作者: converse    时间: 2007-04-09 17:52
>>cout<< *p->b <<endl;

cout<< (*p).b <<endl;




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2