我正在尝试重载取消引用运算符,但是编译以下代码会导致错误'initializing' : cannot convert from 'X' to 'int'
:
struct X {
void f() {}
int operator*() const { return 5; }
};
int main()
{
X* x = new X;
int t = *x;
delete x;
return -898;
}
我做错了什么?
答案 0 :(得分:14)
您正在取消引用指向X
的指针。你的课程没问题(就其实施而言)。
int main()
{
X x; // no pointer
int t = *x; // x acts like a pointer
}
答案 1 :(得分:14)
您应该将取消引用运算符应用于类类型。在您的代码x
中有一个指针类型。写下以下内容:
int t = **x;
或
int t = x->operator*();
答案 2 :(得分:1)
如果您希望原始代码有效,则需要为您的类重载int-cast运算符:
operator int() const { return 5; }