我试图创建一个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>
有人可以帮助我走出这个洞吗? :(
修改 我不能够感谢你们!我真的不希望得到这么多的帮助!说真的,谢谢!
答案 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
}
}
};