无法在结构中初始化struct数组

时间:2016-09-29 14:14:30

标签: c

我试图创建一个RPG式的广告资源,我的广告资源包含一个类型的剑'这是一个数组。 这是我的剑结构的代码:

typedef struct
{
    sword SwordInvent[size];
} inventory;

这是库存的那个:

SwordInvent

我尝试在main函数中初始化main() { inventory inv; inv.SwordInvent[0] = {"Paper Sword", 1, 1, 1}; } 数组,但最终会出错。

  

[错误]预期表达式' {'令牌

<LinearLayout
   android:layout_width="fill_parent"
   android:layout_height="match_parent"
   android:layout_marginLeft="@dimen/twentyone_dp"
  android:layout_gravity="center">

                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="@dimen/eighteen_dp"
                        android:orientation="horizontal">

                        <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"
                        android:text="0"
                        android:textColor="@color/white"/>

                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_weight="1.1"
                            android:text="1"
                            android:textColor="@color/white"/>

                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_weight="1.2"
                            android:text="2"
                            android:textColor="@color/white"/>

                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_weight="1.2"
                            android:text="3"
                            android:textColor="@color/white"/>

                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_weight="1.1"
                            android:text="4"
                            android:textColor="@color/white"/>
                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_weight="1.2"
                            android:text="5"
                            android:textColor="@color/white"/>
                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_weight="1.3"
                            android:text="6"
                            android:textColor="@color/white"/>

                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_weight="0.8"
                            android:text="7"
                            android:textColor="@color/white"/>

                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_weight="1.2"
                            android:text="8"
                            android:gravity="center"
                            android:textColor="@color/white"/>
                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_weight="1"
                            android:text="9"
                            android:gravity="right"
                            android:textColor="@color/white"/>

                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_weight="0.95"
                            android:text="10"
                            android:gravity="right"
                            android:textColor="@color/white"/>

                    </LinearLayout>
                </LinearLayout> 

有人可以帮助我走出这个洞吗? :(

修改 我不能够感谢你们!我真的不希望得到这么多的帮助!说真的,谢谢!

5 个答案:

答案 0 :(得分:5)

你不能只是开始在大括号内列出内容,让编译器神奇地找出你想要的东西。除了使用初始化程序之外,它不会那样工作。初始化器,例如

-(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
   return _searchArray.count;
}


-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {    
       if(section == 0){
            return [[_searchArray objectForKey:@"chatContacts"] count];
        }

        if(section == 1) {
            return [[_searchArray objectForKey:@"otherContacts"] count];
        }

        if(section == 2) {
            return [[[_searchArray objectForKey:@"messagesContacts"] objectForKey:@"messages"]count];
        }
}

与作业不同。对于初始化器,它假设右侧与左侧匹配,因为它是初始化器。此外,它们在复合文字之前存在很长时间,所以尽管如此,你可以使用const sword excalibur = { "Excalibur!", INT_MAX, INT_MAX, FLT_MAX }; 和结构。

您的代码(作业)有点像这样:

=

这个进行浮点除法,因为float x; x = 1 / 2; 1都是整数;编译器没有根据左侧的类型确定它应该有一个浮点结果(并且没有,2的初始化器仍然没有&#39 ; t帮助,float不会分配float x = 1 / 2;,而是0.5;类比结束。

您的大括号列表分配也是如此(种类)。右侧需要一些表示支撑列表类型的东西。

因此,您需要使用复合文字语法:

0

另外,你的剑不是一个数组,它是一个结构。

答案 1 :(得分:5)

当你写:

inventory inv;
inv.SwordInvent[0]={"Paper Sword",1,1,1};

你没有做初始化;你正在做(尝试做)一项任务。初始化看起来像:

inventory inv = { { "Paper Sword", 1, 1, 1 } };

另请注意,这会初始化inv变量的所有元素;没有明确值的那些被归零。

如果要进行分配,请使用复合文字(C99或更高版本):

inventory inv;
inv.SwordInvent[0] = (sword){ "Paper Sword", 1, 1, 1 };

请注意,执行此操作后,只有数组的元素0具有赋值;所有其他元素仍然未初始化(具有不确定的值)。因此,除非size == 1,否则初始化和赋值之间存在相当大的差异。

答案 2 :(得分:2)

您必须在分配前指定类型:

inv.SwordInvent[0] = (sword) { "Paper Sword", 1, 1, 1 };

答案 3 :(得分:1)

inv.SwordInvent[0]={"Paper Sword",1,1,1};

此类转让是非法的。 =右侧的表达式应该具有正确的类型。最简单的方法是使用复合文字(如其他答案中所述):

inv.SwordInvent[0] = (sword){"Paper Sword",1,1,1};

或者您可以使用下一次初始化:

inventory inv = {
    {
        {"Paper Sword",1,1,1},  /* init SwordInvent[0] */
        {"Paper Sword",1,1,1},  /* init SwordInvent[1] */
        /* ... */
    }
};

此变体符合C89,如果您的编译器不支持最新的语言功能,这可能很有用。

答案 4 :(得分:1)

你可以在申报行办理。

模仿您尝试做的最简单的方法是:

inventory inv = {{"Paper Sword",1,1,1}};

更通用(也许是可读)的方式是:

inventory inv =
{
    .SwordInvent =
    {
        {
            .weaponName = "Paper Sword",
            .damage = 1,
            .rarity = 1,
            .price  = 1
        }
    }
};

如果你想初始化数组中的两个条目,那么你可以使用类似的东西:

inventory inv =
{
    .SwordInvent =
    {
        {
            .weaponName = "Paper Sword",
            .damage = 1,
            .rarity = 1,
            .price  = 1
        },
        {
            .weaponName = "Light Saber",
            .damage = 100,
            .rarity = 100,
            .price  = 100
        }
    }
};