我正在开展一个有趣的小项目,这本质上是一个小型的战斗模拟器。我试图在C ++中使用类似于struct的类,就像使用它来创建一个对象(在这种情况下,一个字符或"实体",因为该类被调用)。我试图从主函数调用所述类中的任何整数时,我在标题中得到错误。
class entity{
public int health;
public int accuracy;
public int power;
public int defense;
}
和
public class Tutorial {
static Random rnd = new Random();
entity player;
player.health = 100; // Issue on the health part
player.accuracy = 19; // Issue on the accuracy part
player.power = 15; // Issue on the power part
player.defense = 18; // I think you get it by now...
我一直在寻找一些解释,但我找不到解释错误的性质以及可能的解决方案。如果我能得到那些,那就太棒了。
答案 0 :(得分:3)
编译器期望在行
上进行变量声明player.health = 100;
但是找到了一个任务。陈述
Entity player = new Entity();
player.health = 100;
player.accuracy = 19;
player.power = 15;
player.defense = 18;
应该在代码块中,例如方法或构造函数,而不是类块
答案 1 :(得分:1)
Procedural code cannot be written directly in a class definition.代码导致语法错误,因为这样做不合法。
相反,请将代码放在适当的方法或initialization block中。 (我不认为初始化块在这里是合适的,所以我很容易显示一个"工厂方法"。)
因此,请考虑像
这样的方法// This is a member variable declaration, which is why it's OK
// to have a (static) method call provide the value.
// Alternatively, player could also be initialized in the constructor.
Entity player = makeMeAPlayer();
static Entity makeMeAPlayer() {
// Create and return entity; the code is inside a method
Entity player = new Entity();
player.health = 100;
// etc.
return player;
}
(我还清理了类型以匹配Java命名约定 - 关注套件!)
答案 2 :(得分:0)
这是遭受VariableDeclaratorId高度准确但又不可怕的直观消息传递的另一种方法。
@PostMapping("/showCompany")
public String processForm(@ModelAttribute("company") CompaniesDAO company, company_name, company_function) {
会产生:
Syntax error, insert "... VariableDeclaratorId" to complete FormalParameter
这告诉您需要像String或int这样的变量类型...
@PostMapping("/showCompany")
public String processForm(@ModelAttribute("company") CompaniesDAO company, String company_name, String company_function) {
事实证明VariableDeclaratorId是一个类
public class VariableDeclaratorId
extends Expression
implements prettyprint.PrettyPrintable
如果您将类描述与错误消息一起使用来阅读,以致您忘记定义变量类型,那将给我留下深刻的印象。我只是做出了有根据的猜测。