进行标准的工作面试只是为了计算直方图中的水量。该代码在星期一有效,并且在该站点上still works。更新vala之后,现在会显示错误。
UPD:更简单的example
> Algoritm.vala:2.5-2.16: error: struct `Algotitm.first' cannot be empty
> struct first {
> ^^^^^^^^^^^^ Algoritm.vala:6.5-6.17: error: struct `Algotitm.second' cannot be empty
> struct second {
答案 0 :(得分:2)
在Stack Overflow上发布问题时,最好贴出一个示例代码minimum, complete and verifiable example。
从您提供的链接看来,您有一个结构,其中只有标记为static
的成员:
struct First {
static int data;
static int pos;
}
void main () {
}
将字段标记为static
意味着它们不是实例字段,因此该结构没有字段。这就是为什么您收到有关该结构为空的错误消息的原因。我不确定Vala是否应该允许将结构字段标记为静态,但是允许结构中的方法为静态确实有意义。
您需要删除static
修饰符。这将起作用:
struct First {
int data;
int pos;
}
void main () {
}
我猜您正在尝试编写性能优化的代码,而您认为static
可以帮助您。 Vala中的static
表示没有实例数据可使用。如果您使用的是类或结构之类的数据结构,则只有具有这些实例的实例才有意义。如果您希望程序运行期间某些内容保持不变,请在命名空间中使用const
。
如果您在程序中使用大量结构,则使用结构可能会稍微提高性能。在Vala中创建的结构在堆栈上分配,而不是在堆上分配,因此可能会更快一些。如果要传递结构,则可能需要考虑[SimpleType]
属性。这意味着结构将在C和Vala中按值传递。如果没有[SimpleType]
,它们将被复制并在C级别通过引用传递,该引用在Vala中按值显示。
Vala中的结构可以具有初始化程序(类似于类的构造函数)和方法。因此,我可以从第二个pastebin中提取的内容可以写为:
struct First {
int data;
int pos;
public First (int[] mass) {
data= 5;
pos = mass.length;
}
public int sas () {
return data + pos;
}
}
void main () {
int[] a = {1,3,0,1,2,3,2,1};
var b = First (a);
print (@"$(b.sas ())\n");
}
这是一个后续问题,应该作为堆栈溢出的第二个问题提出。这是一个公开论坛,遵循的格式允许其他人从问题和答案中学习。