我正在定义一个包装类,它可以用作使用强制转换操作符的有效负载的替代品,但是我遇到了指针有效负载的问题:
编译器(g ++ 4.8.3)抱怨:
错误:' - >'的基本操作数有非指针类型'wrapper' W->一种= 3;
除了取消引用之外,所有指针操作都会调用隐式强制转换运算符wrapper::operator T&
,->
运算符是否有特殊之处?
struct pl{int a;};
struct wrapper{
typedef pl* T;
T t;
operator T&(){return t;}
};
int main(){
wrapper w;
w.t=new pl();
(*w).a=1;//ok
w[0].a=2;//ok
w->a=3;//does not compile
++w;//ok
if(w){}//ok
}
注意:与clang 3.3类似的错误
答案 0 :(得分:2)
您缺少为您的班级声明/定义operator->()
函数
struct pl{int a;};
struct wrapper{
typedef pl* T;
T t;
operator T&(){return t;}
T& operator->() { return t; } // << implement this function
};
int main(){
wrapper w;
w.t=new pl();
(*w).a=1;//ok
w[0].a=2;//ok
w->a=3;//does not compile
++w;//ok
if(w){}//ok
}
请参阅 LIVE DEMO