Я новичок в C++ и имею опыт работы с Java и C#. Я только что написал код, чтобы немного познакомиться с исключениями в C++:
#include<iostream>
#include<string>
using namespace std;
class MyException
{
public:
MyException(string message)
{
this->message = message;
}
string& getMessage()
{
return this->message;
}
private:
string message;
};
class MyClass
{
public:
MyClass()
{
v = new string[2];
v[0] = "wdeed";
v[1] = "yyyyyyy";
}
~MyClass()
{
delete[] v;
}
string& operator[](int index)
{
if (index < 0 || index > 1)
throw MyException("index out of bound exception");
return v[index];
}
private:
string *v;
};
int main()
{
int index;
//first option below is not working
MyClass *myClass = new MyClass();
//second option works:
//MyClass myClass;
cin >> index;
cout << endl;
try
{
cout << myClass[index];//this is where the error appears
}
catch (MyException& ex)
{
cout << ex.getMessage();
}
catch (...)
{
cout << "Other exception";
}
return 0;
}
Оператор «cout ‹‹ myClass[index];» выдает ошибки
Ошибки, которые я получаю только при использовании динамического распределения (MyClass *myClass = new MyClass();):
no operator "<<" matches these operands operand types are:std::ostream<
binary '<<': no operator found which takes a right-hand operand of type 'MyClass' (or there is no acceptable conversion)
Как я могу исправить код?
v[0]
имеет типstring
, для которого оператор извлечения (operator<<
) был перегружен. В исходном коде у вас естьmyClass[index]
типаMyClass
, для которого оператор извлечения не был перегружен. Обратите внимание, что вы получаете сообщение об ошибкеoperator<<
, а неoperator[]
. ПосколькуmyClass[index]
по-прежнему является допустимой операцией, она просто не вызывает написанную вами функцию, а просто выполняет простую индексацию указателя. 22.01.2016