为什么在这种情况下,我有一个错误。
class Person {
Person({name,age});
var name,age = 5;
name = "wael";
void Xprint()=>print('$name is $age years old');
}
main () {
var x = Person();
x.Xprint();
}
错误
1.dart:6:3。错误,变量必须使用关键字'const'、'final'、'var'或类型名来声明。变量必须使用关键字'const'、'final'、'var'或类型名来声明。Name = "wael"; ^^^1.dart:6:3: 错误:'name'已经在这个作用域中声明了。 name = "wael"; ^^^1.dart:5:7: Context: var name,age = 5; ^^^1.dart:7:26: Error: void Xprint()=>print('$name is $age years old'); ^。
你不能在一个开放的地方有任何指令。class
. 任何指令必须在一个方法里面。你可以这样做。
class Person {
Person({name,age});
var name= "wael",age = 5; // assign default value while declartion
void Xprint()=>print('$name is $age years old');
}
main () {
var x = Person();
x.Xprint();
}
或者在方法中设置默认值 constructor
class Person {
Person({this.name= "wael",age});
var name,age = 5;
void Xprint()=>print('$name is $age years old');
}
main () {
var x = Person();
x.Xprint();
}
我不知道你在这里想达到什么目的,但让我试着解释一下发生了什么。
如果你宣布 本地 变量(在一个函数内),那么你的方法是正确的。
void someFunction() {
var name, age = 5; // Declaration of two local variables, initialize one of them.
name = "wael"; // Statement assigning a value to `name`.
void xprint() => print('$name is $age years old'); // Function declaration
xprint(); // Statement performing a function call.
}
但是,你在声明一个 阶层:
class Person {
var name, age = 5; // Declaration of two instance variables.
Person({name, age}); // constructor (needs more work);
name = "wael"; // .... this is invalid. Statements are not allowed here.
void Xprint()=>print('$name is $age years old'); // Instance method declaration.
}
所以问题是 name = "wael";
的地方是不允许出现的。语句只允许在函数内部出现,不允许作为类声明的一部分。
目前还不清楚你的 想要 来做。所以,让我们宣布 Person
类的方式。
class Person {
String name;
int age;
Person({this.name = "wael", this.age = 5}); // Parameters initialize variables directly.
void xprint() {
print("$name is $age years old");
}
}
这个类的名字默认为 "wael",年龄默认为 "5",但如果提供了参数,则使用参数代替。
(我可能不会为这个类的 name
或 age
但我们假设在这种情况下它是有意义的)。)