在做資料結構遍歷二叉樹的時候,遇到了乙個問題,在遍歷的時候我利用了stock來儲存模板類指標,push的時候可以儲存,然而在pop的時候,vs提示無法將void型別轉化為對應的指標型別。
錯誤型別:c2204
原因(個人猜想):在使用的時候,儲存的時候模板還未例項化,所以儲存的時候就是乙個void,但是pop的時候我想讓她轉化為模板類指標,編譯器認為型別不匹配所以報錯。
真正原因(大神解答版):
pop返回值型別是void。因為如果返回非void型別,返回時會呼叫複製建構函式,如果其中丟擲異常就會在未完成構造的情況下中斷且無法簡單回滾,無法保證容器的異常安全性,所以在std::stack的設計時就考慮把返回棧頂元素的功能交給其它成員函式實現,這個成員函式的原型是const typename std::stack::value_type& std::stack::top() const;,在std::stack的類作用域內簡作const value_type top() const;,其中value_type是元素型別。
問題最終解決方案:改用函式,不僅僅使用pop函式,在獲取棧頂值的時候,利用top函式!
13 自定義類STOCK
stock.h ifndef stock00 h define stock00 h include string class stock class declaration 作用域 為整個類的常量,不能有型別名 static const int four 4 作用域 為整個類的常量,該常量在靜態儲存...
C 智慧型指標模板類
三個智慧型指標模板 auto ptr unique ptr shared ptr 條件 1 標頭檔案必須包含memory,include 2 智慧型指標模板位於命名空間std,std 或using namespace std 三者的區別 1 所有權。只能有乙個智慧型指標可以擁有乙個特定的物件。aut...
auto ptr模板類 智慧型指標
auto ptr模板類 auto ptr模板定義了類似指標的物件,可以將new獲得 直接或間接 的位址賦給這種物件。當auto ptr物件過期時,其析構函式將使用delete來釋放記憶體。要建立auto ptr物件,必須包含標頭檔案memory。使用通常的模板句法來例項化所需型別的指標。模板中包括 ...