IDE:vs201541行代碼注釋后的的輸出: 取消注釋41行后:編譯器報錯: 錯誤 C2512 “Point::Point”: 沒有合適的默認構造函數可用 TEST1 d:\program files (x86)\microsoft visual studio 14.0\vc\include\tuple 1180 請問該怎么改? 另外,個人覺得 函數 dosomething() 中的 else情形是多余的?不知道為什么,看到某底層代碼有else,搞不懂,來個大神解釋一波哈?
1 回答

智慧大石
TA貢獻1946條經驗 獲得超3個贊
正如Amedeo所說,你在STL多處用到了Point類,而且該類沒有默認合成的構造函數,在執行遇到需要默認實例化該類時就會遇到如上編譯錯誤。
你無法保證在定義STL模板類中何時會實例化你的自定義類,所以最好添加一個默認構造函數。
還有注意到,你注釋掉的41行也是存在隱式漏洞的。
其一,你的默認構造函數沒有了,默認的拷貝函數和賦值運算符重載也不存在。這里你使用了=運算符,而該定義確實不存在。
其二,你的參數是引用,那么賦值給map鍵值對中的對象的生命周期就移交給了它的定義語句所在作用域,也就是vector<Point>的地方,你的代碼比較簡單沒有復雜的邏輯關系,但當你的代碼復雜后,就無法保證map中是否存儲了有效的數據,很可能已經銷毀了的對象。
以上僅為個人看法,個人水平有限,可能存在疏漏,只是給你提示一下方向。謝謝
- 1 回答
- 0 關注
- 803 瀏覽
添加回答
舉報
0/150
提交
取消