【GBK】0G's fans( me ) 13:34:26
typedef struct _TX_DATA
{
int len;
unsigned char buff[0x100];
} TX_DATA, *PTX_DATA;
typedef struct _RX_DATA
{
int len;
unsigned char buff[0x100];
} RX_DATA, *PRX_DATA;
TX_DATA tx;
RX_DATA rx;
map<TX_DATA, RX_DATA> aMap;
aMap[tx] = rx;
這個代碼錯在哪里了呢?
【UTF-8】NewbieCoder's fans3< 夜楓 > 13:44:05
沒初始化變量?
【GBK】0G's fans( me ) 13:44:35
tx,rx已經初始化了
【UTF-8】NewbieCoder's fans3< 夜楓 > 13:44:40
結構體能做KEY么
【UTF-8】NewbieCoder's fans3< 夜楓 > 13:44:46
要重載比較操作符吧
【GBK】0G's fans( me ) 13:45:51
結構體不能當做Key來用嗎
【UTF-8】NewbieCoder's fans3< 夜楓 > 13:46:07
你是什么編譯錯誤啊
【GBK】0G's fans( me ) 13:47:01
1>------ 已啟動生成: 項目: DLL, 配置: Debug Win32 ------
1> Config.cpp
1>c:\program files\microsoft visual studio 10.0\vc\include\xfunctional(125): error C2784: “bool std::operator <(const std::_Tree<_Traits> &,const std::_Tree<_Traits> &)”: 未能從“const TX_DATA”為“const std::_Tree<_Traits> &”推導 模板 參數
1> c:\program files\microsoft visual studio 10.0\vc\include\xtree(1885) : 參見“std::operator <”的聲明
1> c:\program files\microsoft visual studio 10.0\vc\include\xfunctional(124): 編譯類 模板 成員函數“bool std::less<_Ty>::operator ()(const _Ty &,const _Ty &) const”時
1> with
1> [
1> _Ty=TX_DATA
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\map(71): 參見對正在編譯的類 模板 實例化“std::less<_Ty>”的引用
1> with
1> [
1> _Ty=TX_DATA
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\xtree(451): 參見對正在編譯的類 模板 實例化“std::_Tmap_traits<_Kty,_Ty,_Pr,_Alloc,_Mfl>”的引用
1> with
1> [
1> _Kty=TX_DATA,
1> _Ty=RX_DATA,
1> _Pr=std::less<TX_DATA>,
1> _Alloc=std::allocator<std::pair<const TX_DATA,RX_DATA>>,
1> _Mfl=false
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\xtree(520): 參見對正在編譯的類 模板 實例化“std::_Tree_nod<_Traits>”的引用
1> with
1> [
1> _Traits=std::_Tmap_traits<TX_DATA,RX_DATA,std::less<TX_DATA>,std::allocator<std::pair<const TX_DATA,RX_DATA>>,false>
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\xtree(659): 參見對正在編譯的類 模板 實例化“std::_Tree_val<_Traits>”的引用
1> with
1> [
1> _Traits=std::_Tmap_traits<TX_DATA,RX_DATA,std::less<TX_DATA>,std::allocator<std::pair<const TX_DATA,RX_DATA>>,false>
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\map(81): 參見對正在編譯的類 模板 實例化“std::_Tree<_Traits>”的引用
1> with
1> [
1> _Traits=std::_Tmap_traits<TX_DATA,RX_DATA,std::less<TX_DATA>,std::allocator<std::pair<const TX_DATA,RX_DATA>>,false>
1> ]
1> f:\reverse\阿福迪脫機\simulator\dll\globalvars.h(6): 參見對正在編譯的類 模板 實例化“std::map<_Kty,_Ty>”的引用
1> with
1> [
1> _Kty=TX_DATA,
1> _Ty=RX_DATA
1> ]
1>c:\program files\microsoft visual studio 10.0\vc\include\xfunctional(125): error C2784: “bool std::operator <(const std::unique_ptr<_Ty,_Dx> &,const std::unique_ptr<_Ty2,_Dx2> &)”: 未能從“const TX_DATA”為“const std::unique_ptr<_Ty,_Dx> &”推導 模板 參數
1> c:\program files\microsoft visual studio 10.0\vc\include\memory(2582) : 參見“std::operator <”的聲明
1>c:\program files\microsoft visual studio 10.0\vc\include\xfunctional(125): error C2784: “bool std::operator <(const std::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt2> &)”: 未能從“const TX_DATA”為“const std::reverse_iterator<_RanIt> &”推導 模板 參數
1> c:\program files\microsoft visual studio 10.0\vc\include\xutility(1356) : 參見“std::operator <”的聲明
1>c:\program files\microsoft visual studio 10.0\vc\include\xfunctional(125): error C2784: “bool std::operator <(const std::_Revranit<_RanIt,_Base> &,const std::_Revranit<_RanIt2,_Base2> &)”: 未能從“const TX_DATA”為“const std::_Revranit<_RanIt,_Base> &”推導 模板 參數
1> c:\program files\microsoft visual studio 10.0\vc\include\xutility(1179) : 參見“std::operator <”的聲明
1>c:\program files\microsoft visual studio 10.0\vc\include\xfunctional(125): error C2784: “bool std::operator <(const std::pair<_Ty1,_Ty2> &,const std::pair<_Ty1,_Ty2> &)”: 未能從“const TX_DATA”為“const std::pair<_Ty1,_Ty2> &”推導 模板 參數
1> c:\program files\microsoft visual studio 10.0\vc\include\utility(318) : 參見“std::operator <”的聲明
1>c:\program files\microsoft visual studio 10.0\vc\include\xfunctional(125): error C2676: 二進制“<”:“const TX_DATA”不定義該運算符或到預定義運算符可接收的類型的轉換
【UTF-8】NewbieCoder's fans3< 夜楓 > 13:48:13
目測就是沒有比較操作符
【GBK】0G's fans( me ) 13:48:30
【GBK】0G's fans( me ) 13:48:34
那我該怎么辦呢
【UTF-8】NewbieCoder's fans3< 夜楓 > 13:48:55
std::string 不行么
【UTF-8】NewbieCoder's fans3< 夜楓 > 13:49:04
偏要寫成一個len+buff的形式
【GBK】0G's fans( me ) 13:50:45
那就這樣定義map了?
map<string, string> aMap;
【GBK】0G's fans( me ) 13:50:54
可是感覺這樣后期使用不方便
【UTF-8】NewbieCoder's fans3< 夜楓 > 13:51:15
這個看你業務需要
【UTF-8】NewbieCoder's fans3< 夜楓 > 13:51:37
我是覺得 len+buffer這個形式一般沒啥意義,除非做傳輸或者寫文件
【GBK】0G's fans( me ) 13:52:43
業務就是,
給出一個len+buffer,找到對應的len+buffer
【UTF-8】NewbieCoder's fans3< 夜楓 > 13:53:12
我是說你內存里這樣存數據沒啥意義,二進制數據或者字符串的話完全可以用 std::string 存
【UTF-8】NewbieCoder's fans3< 夜楓 > 13:54:04
結構體做KEY的話要重載 operator < 和 == 吧應該
【UTF-8】NewbieCoder's fans3< 夜楓 > 13:54:07
我也沒試過
【GBK】0G's fans( me ) 13:55:52
我知道錯了,我還是用string的好
【UTF-8】NewbieCoder's fans3< 夜楓 > 13:56:19
知錯能改,孺子可教也
【GBK】0G's fans( me ) 13:56:50
不過
string和unsigned char[]
二者怎么轉換呢
【UTF-8】NewbieCoder's fans3< 夜楓 > 13:56:59
assign 也可以
【UTF-8】NewbieCoder's fans3< 夜楓 > 13:57:10
string str(buff, buff+len) 這樣也可以
【GBK】0G's fans( me ) 13:58:00
string轉unsigned char[] 呢
【UTF-8】NewbieCoder's fans3< 夜楓 > 13:58:13
str.data(), str.size()
【GBK】0G's fans( me ) 13:58:37
謝謝夜楓
【GBK】0G's fans( me ) 13:58:40
我去試試
【UTF-8】NewbieCoder's fans3< 夜楓 > 13:59:00
【GBK】0G's fans( me ) 13:59:52
string碰到'\0'不會截斷的,是吧
【GBK】0G's fans( me ) 14:00:06
所以我可以放心存二進制數據?
【UTF-8】NewbieCoder's fans3< 夜楓 > 14:00:13
.size() 才是他的長度
【UTF-8】NewbieCoder's fans3< 夜楓 > 14:00:19
不會根據 \0 截斷
【UTF-8】NewbieCoder's fans3< 夜楓 > 14:00:24
可以存二進制的
【GBK】0G's fans( me ) 14:00:32
真是太好了
【GBK】0G's fans( me ) 14:00:54
【UTF-8】NewbieCoder's fans3< 夜楓 > 14:01:33
不過存二進制有些地方稍微要注意下,具體啥地方我不記得了
【GBK】0G's fans( me ) 14:02:17
遇上問題再說 :)