2015-10-01 66 views
-2

我有这样一个结构:分配一个数组的地址到另一个阵列

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

'e [i] .d'是'int *'而'&(e [i] .b)'是'string *'。你应该执行演员。 –

+1

你没有在你的代码中分配任何数组地址。 – juanchopanza

+0

铸造地址的格式是什么Andrey –

回答

1

成员变量b的类型是字符串,而成员变量d是一个int指针。没有从字符串*到int *的隐式转换。

你将不得不使用类似 reinterpret_cast从字符串*到int *,但我会尽我所能避免这样的事情,因为我相信它打破了严格的别名规则。

e[i].d = reinterpret_cast<int*>(&(e[i].b)); 

我会建议使用字符串*,而不是一个int *保持在首位的地址。这样你就可以存储你的字符串的地址并保持正确的类型,这样你就可以将它用作字符串而不仅仅是一个地址。

struct 
{ 
    string b; 
    int c; 
    string* d; 
}; 
相关问题