在某事发生时出现错误“ ...没有名称类型”

时间:2018-07-18 00:22:56

标签: c++ game-engine game-development

我目前正在研究一个基于文本的小型RPG,但遇到了一个问题。我正在制作一个包含游戏中所有武器的类(也许有更好的方法来列出武器列表,但这是我选择的途径)。我当前的代码是:

#ifndef LISTOFWEAPONS_H
#define LISTOFWEAPONS_H

#include "Weapon.h"

#include <iostream>

using namespace std;

class ListOfWeapons
{
public:
    ListOfWeapons();

    //BASIC (starter) WEAPONS
    //----------------------------------------
    Weapon iron_axe(common, axe, "Iron Axe", 1);
    Weapon iron_sword(common, sword, "Iron Sword", 1);
    Weapon iron_mace(common, mace, "Iron Mace", 1);
    Weapon iron_spear(common, spear, "Iron Spear", 1);
    Weapon iron_staff(common, staff, "Iron Staff", 1);
    Weapon iron_dagger(common, dagger, "Iron Dagger", 1);
    Weapon wood_bow(common, bow, "Wood Bow", 1);
    Weapon wood_crossbow(common, crossbow, "Wood Crossbow", 1);
    Weapon iron_throwing_knife(common, thrown, "Iron Throwing Knife", 1);
    Weapon blunderbuss(common, gun, "Blunderbuss", 1);
    //----------------------------------------

protected:

private:
};

#endif // LISTOFWEAPONS_H

现在,当我编译此代码时,出现错误error: 'Weapon' does not name a type。武器是其自身的一类,可以完全正常地进行编译和工作。所以我的问题是,我到底在这里做错了什么?谢谢您的时间!

2 个答案:

答案 0 :(得分:0)

尝试一下:

class ListOfWeapons
{
public:
    ListOfWeapons()
        // This is the constructor's "initializer list".
        : iron_axe(common, axe, "Iron Axe", 1),
          iron_sword(common, sword, "Iron Sword", 1)
          // ... 
    {

    }


    //BASIC (starter) WEAPONS
    //----------------------------------------
    Weapon iron_axe;
    Weapon iron_sword;
    // ...
    //----------------------------------------
};

重点是您的Weapon成员变量在错误的位置初始化了。

当您需要在构造过程中初始化成员变量时,初始化列表始终是最好的选择。

考虑一个更简单的示例:

class Person {
public:
  Person() : age_(0) {}
  Person(const std::string& name, int age) : name_(name), age_(age) {}

private:
  std::string name_;
  int age_;
};

Person有两个成员变量和两个构造函数。第一个构造函数称为“默认”,因为它没有任何参数,而第二个构造函数是普通的构造函数,您可以在其中为新的Person对象指定名称和年龄。

Person person1;  // 1st constructor
Person person2("Adam", 26);  // 2nd constructor

您可以在声明它们的地方初始化某些类型的成员变量。但这仅适用于基元(int,bool等)。在您的示例中,Weapon不是原始类型,因此您不能仅在声明它们时进行初始化。

答案 1 :(得分:-3)

您定义了一个类名Listofweapon,但没有定义一个类名Weapon