2016-04-03 43 views
2

在下面的代码中,我试图让=运算符int超载。所以我可以在我的程序中支持int A= &d声明。重写原始数据类型的转换

class Data{ 
public: 
    int a; 
    Data(int A): a(A) {} 
    operator int() {return a;} 
}; 

int operator=(int &lhs, Data* rhs){ 
    lhs = rhs->a; 
    return lhs; 
} 

int main(){ 
    Data d(10); 
    int A = &d; 
    return 0; 
} 

但它给编译时错误:

error: ‘int operator=(int&, Data*)’ must be a nonstatic member function int operator=(int &lhs, Data* rhs){
test1.cpp: In function ‘int main()’:
test1.cpp: error: invalid conversion from ‘Data*’ to ‘int’ [-fpermissive] int A = &d;

请建议我重载运算符的正确方法。

回答

2

您不能将任务超载到int。正如编译器告诉你的,operator=必须是类的非静态成员函数,故事结束。

您的班级中已经有了int的转换,因此您可以编写int A = d;

0

您不需要在您的班级中使用赋值运算符(operator=)。此外,它不能采取两个论据。

所有你需要的是演员(你的operator int() {return a;})和适当的任务如int A = d;。当您在d之前编写&时,如果int足够宽以在系统上存储指针,则将d的地址放入A