刚做标准的工作面试就是计算直方图中的水量。星期一这个代码工作了,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 {
在Stack Overflow上发布问题时,最好发布一个代码为minimum, complete and verifiable example的示例。
从您提供的链接看来,您有一个只有成员标记为static
的结构:
struct First {
static int data;
static int pos;
}
void main () {
}
将字段标记为static
意味着它们不是实例字段,因此结构中没有字段。这就是为什么你得到关于结构为空的错误消息。我不确定Vala是否应该允许将struct字段标记为静态,但允许结构中的方法是静态的是有意义的。
你需要删除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");
}
这是一个后续问题,应该作为Stack Overflow的第二个问题提出。这是一个公共论坛,遵循一种格式,允许其他人从问题和答案中学习。