我有这样的结构:
struct a
{
string b;
int c;
int *d;
}
我还宣布:
struct a e[i];
在循环中:
e[i].b= data1;
e[i].c= data2;
e[i].d=&(e[i].b);
这就是出现问题的地方:
e[i].d=&(e[i].b);
我想将字符串b的地址复制到d,这是一个指针。但是我一直收到错误,因为某些原因我无法将字符串转换为int。
答案 0 :(得分:1)
成员变量b的类型为string,而成员变量d是int指针。没有从字符串*到int *的隐式转换。
你必须使用类似的东西 reinterpret_cast从string *转到int *但是我会尽力避免这样的事情,因为我认为它违反了严格的别名规则。
e[i].d = reinterpret_cast<int*>(&(e[i].b));
我建议首先使用字符串*而不是int *来保存地址。这样您就可以存储字符串的地址并保持正确的类型,从而允许您将其用作字符串而不仅仅是地址。
struct
{
string b;
int c;
string* d;
};