我声明了一些结构,请看这里:
struct cache_1_way{
int size;
int set[1][1];
};
struct cache_2_way{
int size;
int set[2][2];
};
struct cache_4_way{
int size;
int set[2][4];
};
我根据关联性创建一个结构数组,然后初始化结构数组中的值。
struct cache_4_way cache[set_count];
for(int i = 0; i < set_count; i++){
cache[i].size = 4;
cache[i].set = {{0,0,0,0},
{0,1,2,3}};
}
为了将一个元素插入到我的缓存中,我使用预先计算的设置位置值来索引某个结构对象。但是,每当我尝试做这样的事情时,我就会听到标题中提到的错误:
for(int j = 0; j < cache[set_loc].size; j++){
//code here
}
这没有任何意义。我能够很好地初始化缓存数组,但是当我尝试在set_loc索引struct对象并访问size属性时,我得到了这个错误。我完全不知道为什么我会收到错误&#34;会员参考基础类型&#39; int&#39;不是一个结构或联盟&#34;每次我尝试索引我的缓存数组。有人可以帮我吗?感谢
答案 0 :(得分:2)
C中的数组不可分配。所以这个分配尝试
cache[i].set = {{0,0,0,0},
{0,1,2,3}};
没有机会工作,不管你使用什么语法。更“受过教育”的尝试可能如下所示
cache[i].set = (const int [2][4]) { {0,0,0,0}, {0,1,2,3} };
(使用复合文字),但它仍然不起作用,因为C中的数组不可分配。
您可以使用复合文字
替换memcpy
的分配
memcpy(cache[i].set, (const int [2][4]) { {0,0,0,0}, {0,1,2,3} }, sizeof cache[i].set);
或手动分配值,逐个元素。
更好的想法可能是分配整个结构,因为结构是可分配的(即使它们内部有数组)
for(int i = 0; i < set_count; i++){
cache[i] = (const struct cache_4_way) { 4, { {0,0,0,0}, {0,1,2,3} } };