【发布时间】:2022-01-15 23:31:17
【问题描述】:
我正在尝试用 C++ 创建一个非常基本的文本游戏。我的问题在于代表当前游戏状态的 State 类。
声明类的.h文件:
#ifndef TEXTADV_STATE_H
#define TEXTADV_STATE_H
#include "Room.h"
#include "GameObject.h"
class State {
Room *currentRoom;
Room *previousRoom;
public:
explicit State(Room *startRoom);
static std::list<GameObject*> inventory;
void goTo(Room *target);
void goBack();
void announceLoc() const;
static void addObj(GameObject *obj);
static void remObj(Gameobject *obj);
Room* getCurrentRoom() const;
Room* getPrevRoom() const;
};
#endif //TEXTADV_STATE_H
对应.cpp文件中构造函数的定义:
State::State(Room *startRoom) : currentRoom(startRoom) {};
在 main.cpp 中,我将 State 对象初始化为:
State *currentState;
为 currentState 赋值时出现此错误: 没有用于初始化“状态”候选构造函数(隐式默认构造函数)的匹配构造函数不可行:需要 0 个参数,但提供了 1 个
void initState() {
currentState = new State(Room::rooms.front());
}
我读过的其他问题/线程似乎说该错误与构造函数重载或没有默认构造函数有关。这些声明过去可以正常工作,我没有更改它们,所以我不确定这里发生了什么。
这里是我的一些房间类(.h 文件):
#ifndef TEXTADV_ROOM_H
#define TEXTADV_ROOM_H
#include <string>
#include <forward_list>
#include <list>
#include "GameObject.h"
using std::string;
/**
* Represents a room (accessible location in the game).
*/
class Room {
public:
/**
* Constructs a new Room.
* @param _name Name of the room.
* @param _desc Description of the room.
*/
Room(const string *_name, const string *_desc);
/**
* List storing all rooms that have been registered via addRoom().
*/
static std::list<Room*> rooms;
/**
* Creates a new Room with the given parameters and register it with the static list.
* @param _name Name of the room.
* @param _desc Description of the room.
*/
static Room* addRoom(const string* _name, const string* _desc);
};
#endif //TEXTADV_ROOM_H
谢谢。
【问题讨论】:
-
“试图初始化一个 State 对象”——不,显示的代码没有初始化任何东西。它为一个名为
currentState的现有对象分配了一些东西。你能展示这个对象是如何构造的,并证明它正确地调用了构造函数吗? -
@samVarshavchik 对不起,我混淆了我的术语。我已经用 currentState 对象的初始化更新了这个问题。谢谢。
-
你有我们可以检查的回购吗?谢谢!
-
@LarryDaVinci 我快速创建了一个您可以查看的:github.com/Sterlehelanthropus/c-text-game/tree/main 这包含所有重要文件。有一些对字符串(例如 &r4name)和自动换行函数的引用。我没有包含这些文件,因为一个只是一个存储字符串的文件,另一个是一组用于将文本输出到控制台的函数,这与我遇到的问题无关。谢谢。
标签: c++ class constructor