关于结构体的一些细节问题
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++真是博大精深
╮(╯▽╰)╭。。。我真是太弱了
相关文章推荐
- 关于结构体的一些问题
- 关于print函数的一些细节问题探讨
- 关于cocoapods中的一些细节问题
- 关于java的一些细节问题,笔试可能会问到,整理一下
- c++中关于const的一些细节问题
- 关于新创建一个虚拟机以及多台机器ssh无密登录的一些细节问题补充
- 关于取余运算的一些细节问题
- OC类中一些细节问题(对象类存储、类中结构体的用法)
- 今天在看一些面试题的时候遇到的一个关于strcmp()返回值的细节问题
- 3.关于Tornado handler的更多细节 (副标题:一些要注意的问题)
- 关于APNs payLoad的一些细节问题
- 关于java初始化块的一些细节问题
- 关于JAVAWEB一些细节问题
- 关于使用webView的一些细节问题
- 关于mysql的一些安全细节问题
- 关于实现ListView原生上拉加载的一些细节问题分析
- 关于switch和scanf的一些细节问题
- 关于项目开发中的一些问题(回答waitu)
- 一些关于中文乱码问题的一些解决方案
- [导入]关于ASPNET在IIS一些问题的经验总结