7

Tôi hiện đang làm việc để tạo ra một chức năng quá tải cho toán tử ==. Tôi đang tạo một tập tin hpp cho danh sách liên kết của tôi và tôi không thể có vẻ để có được điều hành này làm việc trong tập tin hpp.Quá tải chức năng ==

Tôi hiện có này:

template <typename T_> 
class sq_list 
{ 

bool operator == (sq_list & lhs, sq_list & rhs) 
{ 
    return *lhs == *rhs; 
}; 

reference operator *()  { 
     return _c; 
    }; 

}; 
} 

tôi nhận được khoảng 10 lỗi nhưng họ khá nhiều lặp lại như các lỗi:

C2804: nhị phân 'toán tử ==' có quá nhiều thông số
C2333 : 'sq_list :: operator ==': lỗi trong khai báo hàm; bỏ qua nội dung hàm
C2143: lỗi cú pháp: thiếu ';' trước '*'
C4430: thiếu thông số định kiểu - int giả định. Lưu ý: C++ không hỗ trợ mặc định-int

tôi đã cố gắng thay đổi những thứ xung quanh nhưng tôi không ngừng cải có được các lỗi tương tự như trên

Bất cứ lời khuyên hoặc hỗ trợ về vấn đề này được đánh giá rất nhiều.

+0

Bạn cần sqlist Flexo

+0

Và nếu đó là một chức năng thành viên, nó sẽ mất một nghệ thuật và sử dụng này – Flexo

+0

@awoodland: Không, bạn không; bên trong định nghĩa mẫu lớp, chỉ có tên mẫu có thể tham chiếu đến cá thể mẫu hiện tại. Và không có 'T' trong mã OP. –

Trả lời

7

Nhà điều hành thành viên chỉ có đối số một đối số, là đối tượng khác. Đối tượng đầu tiên là bản thân thể hiện:

template <typename T_> 
class sq_list 
{ 
    bool operator == (sq_list & rhs) const // don't forget "const"!! 
    { 
     return *this == *rhs; // doesn't actually work! 
    } 
}; 

Định nghĩa này không thực sự có ý nghĩa vì nó chỉ gọi chính nó theo cách đệ quy. Thay vào đó, nó nên gọi một số hoạt động thành viên, như return this->impl == rhs.impl;.

0

Bạn đang tuyên bố quá tải == như là một phần của định nghĩa lớp, vì trường hợp phương thức sẽ nhận được. Do đó, tham số đầu tiên mà bạn yêu cầu, lhs, đã được ẩn: hãy nhớ, trong các phương thức của một cá thể bạn có quyền truy cập vào this.

class myClass { 
    bool operator== (myClass& other) { 
     // Returns whether this equals other 
    } 
} 

Phương thức ==() của nhà điều hành phải được hiểu là "đối tượng này biết cách so sánh chính nó với người khác".

Bạn có thể quá tải toán tử ==() bên ngoài lớp để nhận hai đối số, cả hai đối tượng được so sánh, nếu điều đó có ý nghĩa hơn đối với bạn. Xem ở đây: http://www.learncpp.com/cpp-tutorial/94-overloading-the-comparison-operators/

0

http://courses.cms.caltech.edu/cs11/material/cpp/donnie/cpp-ops.html

Các toán tử so sánh rất đơn giản. Xác định == đầu tiên, sử dụng chữ ký chức năng như sau:

bool MyClass::operator==(const MyClass &other) const { 
    ... // Compare the values, and return a bool result. 
    } 

Cách so sánh các đối tượng MyClass là của riêng bạn.

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