2016-05-04 192 views
0

我有類C++引發異常

template <class T> 
class Box { 
    public: 
     Box() : size(2), count(0) { 
      arr = new T[size]; 
     } 
     void add(T); 
     T operator[](int); 
    private: 
     int size; 
     int count; 
     T * arr; 
}; 

操作符[]功能

template <class T> 
T Box<T>::operator[](int index) { 
    if (index >= count) 
     throw "Index out of bounds"; 
    return arr[index]; 
} 

在主功能,我首先添加一個元件使用add功能框。然後我試圖通過box[0]得到它,它工作正常。因爲沒有第二個元素,所以我想要在執行box[1]時拋出異常。但沒有拋出異常,它給了我這個錯誤:

Exception thrown at 0x7701DAD8 in Project24.exe: Microsoft C++ exception: char at memory location 0x0018F8A8. 

If there is a handler for this exception, the program may be safely continued. 

我有一個異常處理程序。爲什麼我得到這個錯誤?

編輯:我打開了一個新的項目,複製所有文件,並改變了功能operator[]作爲

template <class T> 
T Box<T>::operator[](size_t index) { 
    string s("Index out of bounds"); 
    if (index >= count) 
     throw s; 
    return arr[index]; 
} 

它現在。

+4

您應該創建完整的,最小的和可驗證的示例。 http://stackoverflow.com/help/mcve – user31264

+1

問題可能是你扔了一個const char *並且它在內存方面並不是很安全?嘗試拋出一個std :: string – NoImaginationGuy

+0

您是否在VS調試器中運行調試會話? –

回答

1

這個錯誤通常由VS顯示,無論何時拋出C++異常並且程序在調試模式下執行。您通常有一個按鈕繼續允許程序繼續併到達處理程序。

順便說一句,在C++中的用法是隻拋出派生自std::exception的類。這絕不是必需的,但被認爲是一種好的做法。