Re: Problem with std::out_of_range
On May 21, 12:44 pm, desktop <f...@sss.com> wrote:
I have the following code:
#include <stdexcept>
int main(){
int i = 10;
int arr[i];
int index = 11;
if (index > i) {
throw std::out_of_range();
}
else {
arr[index] = 33;
}
return 0;
}
but when I compile I get:
no matching function for call to 'std::out_of_range::out_of_range()'
/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/stdexcept:99:
note: candidates are: std::out_of_range::out_of_range(const std::string&)
/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/stdexcept:97:
note: std::out_of_range::out_of_range(const
std::out_of_range&)
why can't I use std::out_of_range() in this manner?
First off, your logic is wrong since arr[10] doesn't exist either. If
you are going to use exceptions and not bother catching them, you are
waisting your time.
#include <iostream>
#include <stdexcept>
template< typename T, const size_t Size >
class Array
{
T m_array[Size];
public:
T& operator[](const size_t i)
{
if(i >= Size)
throw std::out_of_range("index out of range.");
return m_array[i];
}
};
int main()
{
try {
Array< int, 10 > instance;
instance[10] = 99; // throws
}
catch (const std::exception& e)
{
std::cout << "Error: " << e.what();
std::cout << std::endl;
}
}
And instead of reinventing the wheel, why don't you use std::vector
and its at() member function?