好,所以我有这样的结构
typedef struct
{
float x;
float y;
char name[];
} pTip;
还有另一个结构
typdef struct
{
float xx;
float yy;
pTip *tip;
}finalTip;
我创建并填充
map<string, pTip>
地图很好
我现在正在尝试生成finalTips的向量
我做:
map<string, pTip>::const_iterator iter = maps.find(p_name);
所以它很好用,我的迭代器现在有了我需要的东西,我可以用
(iter->second).x
但是我现在想使用该迭代器将其保存在我的finalTip struc obj final中
所以我尝试了:
finalTip final;
final.tip = iter->second;
在这种情况下,我得到了错误:
错误:分配中无法将“ const pTip”转换为“ pTip *”
所以我通过:
*final.tip = iter->second;
这是正确的解决方法还是我做错了。
这似乎可行,但我想确保自己做得对
最佳答案
你要
final.tip = &iter->second;
由于
iter
是map<string, pTip>
迭代器,因此iter->second
是对pTip的引用。用&取得其地址以获取指针。不幸的是,由于您有
const_iterator
,所以&iter->second
将是(const pTip *)
因此,要么获取一个非常量迭代器,要么将.tip成员设置为
const pTip *
;或者,如果您不顾一切,则放弃const:final.tip = const_cast<pTip*>(&iter->second);
最后说明:您可能更喜欢
pTip const*
而不是const pTip *
-它们含义相同。