Tôi đang gặp một số sự cố khi xác định một số tình trạng quá tải của nhà điều hành đối với các lớp mẫu. Ví dụ, hãy lấy lớp giả thuyết này.Quá tải toán tử trên các mẫu lớp
template <class T>
class MyClass {
// ...
};
điều hành + =
// In MyClass.h MyClass<T>& operator+=(const MyClass<T>& classObj); // In MyClass.cpp template <class T> MyClass<T>& MyClass<T>::operator+=(const MyClass<T>& classObj) { // ... return *this; }
Kết quả do lỗi biên dịch này:
no match for 'operator+=' in 'classObj2 += classObj1'
hành < <
// In MyClass.h friend std::ostream& operator<<(std::ostream& out, const MyClass<T>& classObj); // In MyClass.cpp template <class T> std::ostream& operator<<(std::ostream& out, const MyClass<T>& classObj) { // ... return out; }
Kết quả trong cảnh báo trình biên dịch này:
friend declaration 'std::ostream& operator<<(std::ostream&, const MyClass<T>&)' declares a non-template function
Tôi đang làm gì sai ở đây?
bạn có thể đăng một số mã thực mà không biên dịch? – Naveen
@Naveen: bạn có thể nhận phiên bản được nén tại http://www.box.net/shared/v23rj2f8e7 – Pieter