2012-11-11 33 views
-3

我嘗試實現一個堆類,但是我無法在其中使用向量。當我嘗試運行它在類中使用向量

#include <vector> 

template <typename T> 
class Heap { 

public: 
    Heap() { 
    current_size = 0; 
    } 
private: 
    int current_size; 
    std::vector<T> array; 
}; 

這個程序崩潰。 「project2.exe已停止工作。」

編輯:

主要功能:

int main(int argc,char *argv[]) { 

    Heap<int> events; 
} 
+0

向量需要模板參數,例如向量 jozefg

+3

這不是你的整個程序,是嗎? – amaurea

+1

上面的代碼不應該構建成可執行文件,例如,因爲它缺少main()函數。你發佈的代碼看起來很好(儘管我會在成員初始化列表中初始化'current_size',假設'array.size()'不適合...)。問題必須在您未發佈的代碼中。 –

回答

1

"project2.exe has stopped working."是一個模糊的錯誤,但在運行時是絕對發生。這對您或您的程序用戶沒有幫助,因此您需要實施更好的錯誤處理。

當使用載體,運行時間錯誤通常從壞分配(std::bad_alloc例外),並在載體的訪問元素不存在(std::out_of_range除外)發生。抓住這些例外,以防止程序崩潰,泄漏內存並顯示"project2.exe has stopped working."錯誤消息。

您可以通過放置一個try-catch塊中的主要功能捕捉所有從你的程序的例外:

int main(int argc, char *argv[]) 
{ 
    try 
    { 
     // put all your code here 
     Heap<int> events; 
    } 
    catch (const std::exception& x) 
    { 
     // all std exceptions are caught here 
     std::cerr << x.what() << '\n'; 
    } 
} 

如果你的代碼包含vector[subscript],它不會拋出std::out_of_range例外。如果您不需要對性能至關重要,請將其替換爲vector.at(subscript)以便拋出異常。

請記住,錯誤處理不會解決問題,但可以提供導致解決方案的重要提示。另外,你應該考慮使用調試器。他們會告訴你哪一行代碼導致程序停止工作。