我有一张wxObject的地图..但是我想将它强制转换为wxVariant。
void MWDataViewTable::InitColumnValues(wxString targetcolumn,wxString sourcecolumn , std::map<wxObject,wxObject> srctargetvalue)
{
wxVariant srcvalue;
wxVariant tgtvalue;
int srccolumnpos = GetColumnPosition(sourcecolumn);
int tgtcolumnpos = GetColumnPosition(targetcolumn);
int rows = m_rowdataList.size()-1; //without header
for(int i=0;i< rows;i++)
{
GetValue(srcvalue,i,srccolumnpos);
tgtvalue = (wxVariant)srctargetvalue[srcvalue] ;// typecasting
SetValue(tgtvalue,i,tgtcolumnpos/*toggle-column*/);
}
}
在突出显示的行中我正在进行类型转换..但是这给了我一个错误,上面写着&#34;错误1错误C2678:二进制&#39;&lt;&#39; :找不到哪个运算符采用类型&#39; const wxObject&#39;&#34; 此错误发生在 xstddef.h 文件中。 我不知道为什么会发生这种情况,或者我错误地进行了类型转换。 请帮助..!
答案 0 :(得分:1)
在std::map
,key values are generally used to sort and uniquely identify the elements
。
在您的代码中,密钥和值均为wxObject
类型。
wxObject
类似乎没有重载一个小于操作符的方法(我不知道这些wx对象是什么)。
std::map
需要less operator
方法来执行对键值进行排序所需的比较。
所以你应该将自己的比较函数传递给比较两个wxObjects的std :: map。
模板容器std :: map将compare函数作为第三个文件。
template < class Key, // map::key_type
class T, // map::mapped_type
class Compare = less<Key>, // map::key_compare
class Alloc = allocator<pair<const Key,T> > // map::allocator_type
> class map;
Compare是一个二元谓词,在你的情况下会有以下定义:
bool MyCompare( const wxObject& , const wxObject&)
{
\\Compare logic that returns true or false
}
您可以拥有自己的地图,使用此比较方法:
typedef std::map<wxObject,wxObject,&MyCompare> MyMap;
MyMap srctargetvalue;