1

所以现在我只是想建立一个简单的类,但不知道为什么我会出错。这是我的头文件:

#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

4 回答 4

16

这一行:

#define Mob

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

看起来你想制作一个包含警卫,它应该看起来像:

#ifndef MOB_H
#define MOB_H


  ...

#endif
于 2013-10-11T16:43:09.353 回答
13

你定义Mob为......什么都没有。这使您的代码等效于:

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

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

如果您尝试包含保护,则需要一个唯一的名称并有条件地定义它:

#ifndef UNIQUE_MOB
#define UNIQUE_MOB
// code
#endif
于 2013-10-11T16:43:05.223 回答
0

As far as I know everything that exists in C++ directives are known as entities except Processor directives(e.g macro , symbolic constants etc) and about pointers keep it in mind that for ease of applying them , imagine them as integer variables whose duty is keeping the address of memory storage locations this is good hack in the level where you are learning about pointers for the 1st time

于 2020-03-07T06:50:31.337 回答
0

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

#pragma once

class mob
{
private:
    int lvl;
    float hp;
public:
    mob(int level, float health)
        : lvl(level), hp(health) {}
};
于 2020-09-25T12:58:07.507 回答