您的位置:首页 > 其它

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

2017-02-15 19:13 197 查看

结构体中的易错点

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

问题 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++真是博大精深

╮(╯▽╰)╭。。。我真是太弱了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: