关于结构体的一些细节问题

结构体中的易错点


作为一名蒟蒻,我常常在各种各样的编程问题上磕磕绊绊。今天又是这样。

问题 I

大致就是当我声明了一个结构体edge,然后又自定义了一个构造函数edge(int …)(带参的),然后。。。我想要声明一个edge的数组,编译器却一直在报错:
(部分代码如下)

typedef struct edge{
    int n,u,v,l;
    edge(int n,int u,int v,int l){
        this->n=n;
        this->u=u;
        this->v=v;
        this->l=l;
    }
}edge;
edge e[maxn];

(编译器报错如下)

[Error] no matching function for call to ‘edge::edge()’

然后我就调啊调,最后在网上找到了一篇文章,终于解决了我的问题,下面我就来分享一下

解决方案

定义结构体数组要有默认构造函数才行,如果你没有定义构造函数,那编译器就会自动给你生成一个,但只要你定义了构造函数,编译器就不再帮你生成了,所以你的错误是没有默认构造函数,要改的话,给你上面那个构造函数的参数全部加上缺省值就可以了————来自某好心人

这个的意思是我还应该再编写一个无参构造函数,因为原来的那个被我重载掉了。。。
加上下面这一段代码就好了(在结构体内部加入):

edge():n(0),u(0),v(0),l(0){}

于是这个问题就这样过去了

问题 II

后来在给结构体数组赋值时,我是这样写的:

e[i]=new edge(i,x,y,l);

然后就又错了

然而我改成这样就正确了:

e[i]=edge(i,x,y,l);

应该是new只能给指针类型的初始化吧,我这个已经有了构造函数直接赋值就好,总之C++真是博大精深

╮(╯▽╰)╭。。。我真是太弱了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值