声明构造函数时,c++没有匹配的构造函数



我正在尝试用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时出现以下错误:没有用于初始化"State"候选构造函数(隐式默认构造函数(的匹配构造函数不可行:需要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

谢谢。

std::list::front()返回一个迭代器。不是元素的(副本(
您还必须首先检查列表是否为空。

void initState() {
if (not Rooms::rooms.empty()) 
currentState = new State(Room::rooms.front());
}

此外,为类声明构造函数会删除默认构造函数
您可以使用= default将其添加回

// foo.hpp
class foo {
int *p_, *k_;
public:
explicit foo(int*, int*);
foo() = default;
};
// foo.cpp
foo::foo(int *p, int *k) 
: p_{ p }, k_{ k }
{}

最新更新