2012-08-22 20 views
21

Tôi cố gắng để quá tải C++ toán tử == nhưng im nhận được một số lỗi ...C++ lỗi C2662 không thể chuyển đổi 'này' con trỏ từ 'Loại const' thành 'Loại &'

lỗi C2662: 'CombatEvent: : getType': không thể chuyển đổi 'này' con trỏ từ 'CombatEvent const' thành 'CombatEvent &'

lỗi này là tại dòng này

if (lhs.getType() == rhs.getType()) 

xem mã dưới đây:

class CombatEvent { 

public: 
    CombatEvent(void); 
    ~CombatEvent(void); 

    enum CombatEventType { 
     AttackingType, 
     ... 
     LowResourcesType 
    }; 

    CombatEventType getType(); 
    BaseAgent* getAgent(); 

    friend bool operator<(const CombatEvent& lhs, const CombatEvent& rhs) { 

     if (lhs.getType() == rhs.getType()) 
      return true; 

     return false; 
    } 

    friend bool operator==(const CombatEvent& lhs, const CombatEvent& rhs) { 

     if (lhs.getType() == rhs.getType()) 
      return true; 

     return false; 
    } 

private: 
    UnitType unitType; 
} 

ai cũng có thể trợ giúp?

Trả lời

49
CombatEventType getType(); 

cần phải được

CombatEventType getType() const; 

trình biên dịch của bạn được phàn nàn vì các chức năng đã được trao một đối tượng const rằng bạn đang cố gắng để gọi một const chức năng không vào. Khi một hàm nhận được đối tượng const, tất cả các cuộc gọi đến nó phải là const trong suốt hàm (nếu không trình biên dịch không thể chắc chắn rằng nó chưa được sửa đổi).

+1

Rất thông minh. Đã cho tôi một vài phút để nắm bắt đầy đủ ý tưởng. Cảm ơn nhiều. –

6

thay đổi việc kê khai để:

CombatEventType getType() const; 

bạn chỉ có thể gọi các thành viên 'const' trough tham chiếu đến const.

5

Đó là một vấn đề const, phương thức getType của bạn không được định nghĩa là const nhưng đối số toán tử quá tải của bạn là. Bởi vì phương thức getType không đảm bảo rằng nó sẽ không thay đổi dữ liệu lớp, trình biên dịch sẽ ném một lỗi khi bạn không thể thay đổi tham số const;

Sự thay đổi đơn giản nhất là thay đổi phương pháp getType để

CombatEventType getType() const; 

Trừ khi tất nhiên phương pháp này là thực sự thay đổi đối tượng.