我是 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();)时出现的错误是:
没有运算符“<<”匹配这些操作数操作数类型为:std::ostream<
二进制“<<”:找不到采用“MyClass”类型右侧操作数的运算符(或者没有可接受的转换)
如何修复代码?
最佳答案
MyClass *myClass
是一个指向 MyClass
的指针目的。因此,您需要在将其用作 MyClass
之前取消引用它。 :
(*myClass)[index];
但实际上,您不需要使用 new
根本就在这里。 myClass
应该只是一个自动对象(如注释掉的代码)和内部 std::string
动态数组应该是 std::vector<std::string>
相反。
关于c++ - 使用包含类的动态实例化后调用 C++ 重载运算符 [] 似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34944962/