作為一名蒟蒻,我常常在各種各樣的編程問題上磕磕絆絆。今天又是這樣。
大致就是當我聲明了一個結構體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){}于是這個問題就這樣過去了
后來在給結構體數組賦值時,我是這樣寫的:
e[i]=new edge(i,x,y,l);然后就又錯了
然而我改成這樣就正確了:
e[i]=edge(i,x,y,l);應該是new只能給指針類型的初始化吧,我這個已經有了構造函數直接賦值就好,總之C++真是博大精深
╮(╯▽╰)╭。。。我真是太弱了
新聞熱點
疑難解答