我目前正在研究一个基于文本的小型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
。武器是其自身的一类,可以完全正常地进行编译和工作。所以我的问题是,我到底在这里做错了什么?谢谢您的时间!
答案 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