Test.htoán tử == và danh sách :: remove()
#ifndef TEST_H
#define TEST_H
#include <memory>
template <class Type>
bool operator==(const std::weak_ptr<Type>& wp1, const std::weak_ptr<Type>& wp2)
{
std::shared_ptr<Type> sp1;
if(!wp1.expired())
sp1 = wp1.lock();
std::shared_ptr<Type> sp2;
if(!wp2.expired())
sp2 = wp2.lock();
return sp1 == sp2;
}
#endif
Test.cpp
#include "Test.h"
#include <list>
int main()
{
typedef std::list< std::weak_ptr<int> > intList;
std::shared_ptr<int> sp(new int(5));
std::weak_ptr<int> wp(sp);
intList myList;
myList.push_back(wp);
myList.remove(wp); //Problem
}
Chương trình sẽ không biên dịch do myList.remove() :
1> c: \ tệp chương trình (x86) \ microsoft visual studio 10.0 \ vc \ include \ list (1194): lỗi C2678: nhị phân '==': không tìm thấy toán tử nào có toán hạng bên trái của loại 'std :: tr1 :: weak_ptr < _Ty>' (hoặc không chấp nhận được chuyển đổi) 1>
với 1> [1> _Ty = int 1>]
Nhưng bạn sẽ nhìn thấy sau đây quy định tại Test.h:
bool operator==(const std::weak_ptr<Type>& wp1, const std::weak_ptr<Type>& wp2)
vấn đề là gì?
không chắc chắn, nhưng bạn có thể thử định nghĩa toán tử bool == với tham chiếu const không? – CharlesB
Rất tiếc, tôi đã có nó theo cách đó ban đầu và quên thay đổi nó trở lại. Cùng một vấn đề với tham chiếu const. – user987280