2010-03-24 29 views
9

Tôi đang cố gắng quá tải toán tử tham chiếu, nhưng biên dịch các kết quả mã sau vào lỗi 'initializing' : cannot convert from 'X' to 'int':quá tải dereference hành

struct X { 
    void f() {} 
    int operator*() const { return 5; } 
}; 

int main() 
{ 
    X* x = new X; 
    int t = *x; 
    delete x; 
    return -898; 
} 

Tôi đang làm gì sai?

Trả lời

14

Bạn nên áp dụng toán tử dereference cho loại lớp. Trong mã số x của bạn có loại con trỏ. Viết như sau:

int t = **x; 

hoặc

int t = x->operator*(); 
14

Bạn đang dereferencing là con trỏ tới X. Lớp học của bạn là OK (theo như nó được thực hiện).

int main() 
{ 
    X x; // no pointer 
    int t = *x; // x acts like a pointer 
} 
1

Nếu bạn muốn mã ban đầu để làm việc, bạn cần phải nạp chồng toán tử int-cast cho lớp học của bạn:

operator int() const { return 5; } 
+0

'hành int 'có rất nhiều gotchas và tốt nhất là tránh. Toán tử dereference sử dụng hợp pháp như mô phỏng con trỏ. – Potatoswatter

+0

@David: các chuyển đổi thành 'bool' có nhiều hơn các giá trị khác, nhưng có thể đó là một giọt trong thùng; v) – Potatoswatter

+0

@David: Câu hỏi là về' toán tử int * ', không phải' toán tử int * ' – visitor

Các vấn đề liên quan