發現錯誤我:不能使用set_difference算法
「object.h」
namespace objectNS
{
class object
{
public:
int m_number;
bool operator== (const object& object) const;
bool operator< (const object& object) const;
};
class compare
{
public:
bool operator()(const object*, const object*) const;
};
}
「object.cpp」
#include "object.h"
typedef objectNS::object OBJECT;
bool OBJECT::operator== (const object &object) const
{
return this->m_number == object.m_number;
}
bool OBJECT::operator< (const object &object) const
{
return this->m_number < object.m_number;
}
bool objectNS::compare::operator() (const object* obj1, const object* obj2) const
{
return obj1->m_number > obj2->m_number;
}
我得到了一些功能它與物體一起使用,
void f(void)
{
set<Compound_object*> detectedObjects;
set<Compound_object*> deleteFromTrackedObjects;
set_difference(detectedObjects.begin(), detectedObjects.end(), this->m_trackedObjects.begin(), this->m_trackedObjects.end(), inserter(addToTrackedObjects, addToTrackedObjects.end()));
}
問題描述: 我實現operator<
和operator==
通過兩個實例的對比,進行由m_number
,但是當集detectedObjects
和trackedObjects
包含具有相同m_number
元件時,std::set_difference
返回所有按預期方式使用元素而不是空結果集。
我甚至試圖給功能對象compare
作爲模板參數,但因此我得到了很多關於=
和!=
沒有正確定義的編譯器錯誤。
我不知道是什麼問題?
請張貼代碼,我們可以編譯('m_number' vs'm_numberOfObject','this'在一個非成員函數中),但保持最小值(什麼是「比較」)。正確縮進。 – avakar
可能有一些難以理解的typedefs參與,但從您的聲明,似乎你的集包含_pointers_對象,而不是對象本身。在這種情況下,作爲對象類的一部分定義的'operator <'不會生效。 – jogojapan
@ jogojapan,是的,謝謝,聽起來很合理,我沒有注意到它。所以我需要將適當的類定義爲比較器並將它作爲set的參數進行聲明?但是,當我試圖將我的比較類作爲參數提供給集合時,我得到那些「=」,「!=」而不是定義的原因是什麼? –