错误:预期标识符

时间:2013-10-11 16:41:11

标签: c++

所以现在我只是想设置一个简单的类,并且无法弄清楚为什么我会出错。这是我的头文件:

#define Mob

class Mob{
private:
    int lvl;
    float hp;
public:
    Mob(int, float); //Error expected an identifier on the float
};

和带有它的cpp文件

#include "Mob.h"

Mob::Mob(int level, float health) // Error expected an identifier on the int and float
// and an Error: Expected a ; after the )
{
    hp = health;
    lvl = level;
} 

4 个答案:

答案 0 :(得分:14)

这一行:

#define Mob

导致单词Mob的每个实例都替换为代码中的任何内容。不要那样做。

看起来你想制作一个include guard,看起来应该是这样的:

#ifndef MOB_H
#define MOB_H


  ...

#endif

答案 1 :(得分:9)

您将Mob定义为......没有。这使您的代码等同于:

class {
private:
    int lvl;
    float hp;
public:
    (int, float); // Expecting an identifier indeed
};

这适用于包含#define Mob的其余代码。

如果您正在尝试制作包含警卫,则需要一个唯一的名称并将其定义为条件:

#ifndef UNIQUE_MOB
#define UNIQUE_MOB
// code
#endif

答案 2 :(得分:0)

据我所知,除了处理器指令(例如宏,符号常量等)外,C ++指令中存在的所有内容都称为实体。 关于指针,请记住,为便于应用,请将它们想象为整数变量,其职责是保持内存存储单元的地址 这是您第一次学习指针的好技巧

答案 3 :(得分:0)

首先,您可以删除#define mob。您要做的就是#pragma once,以避免两次将.h文件包括在内。正如我在这里看到的,您有两个文件,分别称为mob.h和mob.cpp。像下面的代码一样,可以将文件放在mob.h中,而不用拥有两个不同的文件,并且由于仅在构造函数中初始化变量,因此可以在()和{}括号之间使用:运算符。 lvl(level)中括号前面的变量名称是您的类中定义的变量,括号内的变量名称是函数中的变量。

#pragma once

class mob
{
private:
    int lvl;
    float hp;
public:
    mob(int level, float health)
        : lvl(level), hp(health) {}
};