好,所以我有这样的结构

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;


由于itermap<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 *-它们含义相同。

10-08 04:15