當我嘗試使用這樣的代碼:錯誤與運營商<超載,非法操作數
namespace
{
typedef boost::shared_ptr<float> sharedFloat;
}
static bool operator<(const sharedFloat& inOne, float inTwo)
{
return *inOne < inTwo;
}
static void foo()
{
std::vector<sharedFloat> theVec;
std::vector<sharedFloat>::iterator i =
std::lower_bound(theVec.begin(), theVec.end(), 3.4f);
}
我得到一個錯誤:
error: invalid operands to binary expression ('boost::shared_ptr<float>' and 'float')
(的指針在執行<比較)所以,當我提供operator<
這些操作數時,爲什麼它們是無效的?
如果我改用比較函子,
namespace
{
typedef boost::shared_ptr<float> sharedFloat;
struct Comp
{
bool operator()(const sharedFloat& inOne, float inTwo)
{
return *inOne < inTwo;
}
};
}
static void foo()
{
std::vector<sharedFloat> theVec;
std::vector<sharedFloat>::iterator i =
std::lower_bound(theVec.begin(), theVec.end(), 3.4f, Comp());
}
然後再編譯。我可以這樣做,但我想知道爲什麼第一次嘗試失敗。
解決方案後添加:Namespaces & Interface Principle通過Herb Sutter幫助澄清這些東西更多。
如果將typedef從命名空間中取出,它是否工作? – EHuhtala 2013-03-12 21:23:35
@EHuhtala,不,這沒有效果。 – JWWalker 2013-03-12 21:33:24