首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于自定义对象 stl bind1st,该如何处理

2012-09-11 
关于自定义对象 stl bind1sttypedef struct stTestData{stTestData(std::string name ,int nData 0)

关于自定义对象 stl bind1st
typedef struct stTestData
{
stTestData(std::string name = "",int nData = 0)
{
m_strName = name;
m_nData = nData;
}

stTestData(const stTestData& data)
{
*this = data;
}
std::stringm_strName;
intm_nData;

stTestData& operator = (const stTestData& data)
{
if (this == &data)
{
return *this;
}
m_strName = data.m_strName;
m_nData = data.m_nData;

return *this;
}

bool operator == (const stTestData& refData)
{
return m_nData == refData.m_nData;
}
}TestData,*PTestData;

typedef std::vector<TestData>VectorTestData;
typedef VectorTestData::iteratorItVectorTestData;
typedef VectorTestData::reverse_iteratorRItVectorTestData;


for (int loop = 0; loop < 20; loop++)
{
char buf[40] = {0};

sprintf_s(buf,40,"%d",loop);

m_vecTestData.push_back(TestData(buf,loop));
}

binder1st<equal_to<TestData>> bind_1st_type =
bind1st(equal_to<TestData>(),TestData("",5));

ItVectorTestData itFind_If_bind1st = find_if(m_vecTestData.begin(),m_vecTestData.end(),bind_1st_type);

正在编译...
1>STL_Vector.cpp
1>d:\program files\microsoft visual studio 9.0\vc\include\functional(110) : error C2678: 二进制“==”: 没有找到接受“const STLStudy::Vector::TestData”类型的左操作数的运算符(或没有可接受的转换)
1> d:\mydocument\codestudy\stlstudy\stlstudy\stlstudy\vector\stl_vector.h(36): 可能是“bool STLStudy::Vector::stTestData::operator ==(const STLStudy::Vector::stTestData &)”
1> 试图匹配参数列表“(const STLStudy::Vector::TestData, const STLStudy::Vector::TestData)”时
1> d:\program files\microsoft visual studio 9.0\vc\include\functional(109): 编译类 模板 成员函数“bool std::equal_to<_Ty>::operator ()(const _Ty &,const _Ty &) const”时
1> with
1> [
1> _Ty=STLStudy::Vector::TestData
1> ]
1> d:\program files\microsoft visual studio 9.0\vc\include\functional(261): 参见对正在编译的类 模板 实例化“std::equal_to<_Ty>”的引用
1> with
1> [
1> _Ty=STLStudy::Vector::TestData
1> ]
1> d:\mydocument\codestudy\stlstudy\stlstudy\stlstudy\vector\stl_vector.cpp(179): 参见对正在编译的类 模板 实例化“std::binder1st<_Fn2>”的引用
1> with
1> [
1> _Fn2=std::equal_to<STLStudy::Vector::TestData>
1> ]

[解决办法]
因为比较的时候是两个const strData&对象间的比较,所以改成
bool operator == (const stTestData& refData) const

另外
stTestData(std::string name = "",int nData = 0)
改成stTestData(const std::string& name = "",int nData = 0)

因为m_strName是std::string类型的, m_nData是int类型,所以
stTestData& operator = (const stTestData& data)没有太大的必要
如果m_strName是char*倒是需要这个函数。

热点排行