2014-10-15 30 views
6

tôi thiếu kinh nghiệm của việc sử dụng C++ và bị mắc kẹt tại điểm mà trình biên dịch tạo ra toán hạng không hợp lệ để biểu nhị phânCách sửa lỗi "toán hạng không hợp lệ thành biểu thức nhị phân"?

class Animal{ 
public: 
    int weight; 
}; 

int main(){ 
    Animal x, y; 
    x.weight = 33; 
    y.weight = 3; 

    if(x != y) { 
    // do something 
    } 
} 

Tôi muốn sử dụng x và so sánh với y, mà không cần thay đổi mã ví dụ (x.weight! = y.weight) trong mã chính. Làm thế nào tôi nên tiếp cận vấn đề này từ lớp bên ngoài hoặc định nghĩa?

+4

xác định 'hành bool = (Animal const & a1,! Động vật const & a2) {a1.weight! = A2.weight; } ' – user657267

+4

toán tử quá tải'! = 'Với việc triển khai của riêng bạn .. –

+0

mã trong chính() phải được bỏ qua –

Trả lời

3

Hoặc bạn có thể thêm sự quá tải toán tử như phi thành viên:

#include <iostream> 
using namespace std; 

class Animal{ 
public: 
    int weight; 
}; 

static bool operator!=(const Animal& a1, const Animal& a2) { 
    return a1.weight != a2.weight; 
} 

int main(){ 
    Animal x, y; 
    x.weight = 33; 
    y.weight = 3; 

    if(x != y) { 
     cout << "Not equal weight" << endl; 
    } 
    else { 
     cout << "Equal weight" << endl; 
    } 
} 
4

Như đã đề cập trong các ý kiến ​​bạn cần phải nạp chồng toán tử !=, ví dụ

class Animal{ 
public: 
    int weight; 

    bool operator!=(const Animal &other) 
    { 
     return weight != other.weight; 
    } 
}; 

Một biểu x != y cũng giống như một cuộc gọi chức năng để điều hành này, trên thực tế nó cũng giống như x.operator!=(y).

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