C - 成员参考基础类型' int'不是结构或联盟

时间:2017-12-01 01:07:04

标签: c arrays struct

我声明了一些结构,请看这里:

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;每次我尝试索引我的缓存数组。有人可以帮我吗?感谢

1 个答案:

答案 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} } };