2012-02-18 28 views
5

Tôi đã tạo một toán tử quá tải cho ++ trong tệp .hpp của tôi và sau đó một hàm gọi nó trong tệp .hpp. Tệp .cpp sau đó gọi hàm nhưng khi hàm nhấn mã ++ nó không chứa toán tử được tái định nghĩa mà thay vào đó sử dụng toán tử vận ​​hành mặc định cho ++. Tại sao nó không sử dụng toán tử quá tải của tôi?Tại sao nó không sử dụng toán tử quá tải của tôi cho ++?

Dưới đây là các nhà khai thác cho ++:

iterator& operator ++() { // pre-increment 
     std::list<value_type>::iterator i = listOfValues.begin(); 
     advance(i,1); 
     return &*i; 
    } 

    Square_List operator ++ (int) { // post-increment 
     std::list<value_type>::iterator i = listOfValues.begin(); 
     advance(i,1); 
     return &*i; 
    } 

Và đây là chức năng sử dụng nó:

template <typename A_> 
void testerIncrement(A_ toInc) 
{ 

    toInc = listOfValues.begin(); 
    cout << "\n" << *toInc; 
    ++toInc; 
    cout << "\n" << *toInc; 
    ++toInc; 
} 

Và cuối cùng cuộc gọi cho các chức năng trong file cpp

ca.testerIncrement(ca.listOfValues.begin()); 

Trả lời

4

Bạn quá tải toán tử tăng thêm tiền tố ++ với toán tử hàm không phải là số tháng có một đối số của lớp nhập hoặc tham chiếu đến loại lớp hoặc với toán tử hàm thành viên không có đối số.

Dường như bạn đang sử dụng các toán tử không phải thành viên. Vì vậy, cú pháp của bạn phải là void operator ++ (iterator &); // tiền tố và vô hiệu toán tử ++ (Square_List, int); // postfix.

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