gpt4 book ai didi

c++ - 类对象作为数据成员和头文件包括

转载 作者:行者123 更新时间:2023-11-28 07:23:39 27 4
gpt4 key购买 nike

我目前正在通过编写一个小文本冒险来整合我在 C++ 中学到的知识 - 只是试图弄清楚基本的类相互关系,这样我就可以让玩家在几个房间中移动。编译时,我的 room.h 文件中出现“expected unqualified id before '}”错误。我认为这可能与 Room 类成员有关,它是 Exit 对象指针的 vector ,但我不确定。如果我遗漏了一些明显但重要的东西,我会很感激快速扫描代码让我知道。对不起,如果这变得复杂。我会尽量简明扼要。

我不确定你们所有人可能需要看什么(代码方面),我不想放弃整个代码,所以......让我概述一下我是如何设置的,首先是:

1) 我有一个从 main() 调用的 cpp 文件,它在堆上实例化了 21 个新房间2) 接下来是另一个 cpp 文件,它在堆上实例化新的 Exit 对象,将它们推送到 vector 上,并调用 Room.set() 函数将 Exit 指针的 vector 作为其数据成员之一传递给 Room 类。 vector 中的每个导出也将有一个指向在堆上创建的新房间之一的指针。

实例化新房间的文件如下所示:

#include "RoomsInit.h"
#include "Room.h"



void InstantiateRooms()
{
string roomName1 = "On a deserted beach";
string roomDescr1 = "You are standing on a deserted beach. To the east, a "
"crystal blue ocean\n dances in the morning sun. To the "
"west is a dense jungle, and somewhere\n far off, you can "
"hear the singing of a strange bird. The white, sandy \n"
"beach runs out of sight to the north and south.\n\n\n";

Room* p_deserted_beach = new Room(roomName1, roomDescr1);

* 此时只有 roomName 和 roomDescr 被传递给构造函数......文件中还有 20 个这样的房间。

Exit 实例化文件如下所示:

#include "exitsInit.h"
#include "exit.h"
#include "room.h"
#include "RoomsInit.h"


void InstantiateExits()
{

vector<Exit*> exitVec;

Exit* p_north1 = new Exit("north", p_on_the_beach_north, true, false);
Exit* p_south1 = new Exit("south", p_on_the_beach_south1, true, false);
Exit* p_east1 = new Exit("east", p_in_the_ocean, true, false);
Exit* p_west1 = new Exit("west", p_in_the_jungle, true, false);
exitVec.push_back(p_north1);
exitVec.push_back(p_south1);
exitVec.push_back(p_east1);
exitVec.push_back(p_west1);

(*p_deserted_beach).SetExitVec(exitVec);
exitVec.clear();

exitVec 被创建并通过 set 函数发送到 Room 类,成为它的数据成员之一......这个文件中还有 20 组这样的数据)每个房间一组)。

我的 Room 类头文件,我在其中遇到编译器错误,目前看起来像这样:

#ifndef ROOM_H_INCLUDED
#define ROOM_H_INCLUDED

#include <iostream>
#include <string>
#include <vector>
class Exit;

using namespace std;


class Room
{
private:
string m_roomName;
string m_roomDescr;
string m_specDescr;
bool m_isSpecDescr;
vector<Exit*> m_exitVec;


public:
Room(string roomName, string roomDescr, string specDescr = "",
bool isSpecDescr = false);

string GetRoomName(); const
string GetRoomDes(); const
bool GetRoomSpecBool(); const
string GetRoomSpec(); const

void SetExitVec(vector<Exit*> exitVec);
vector<Exit*> GetExitVec(); const

};


#endif // ROOM_H_INCLUDED

----------- with the corresponding cpp file: --------------

#include "room.h"



Room::Room(string roomName, string roomDescr,
string specDescr, bool isSpecDescr) :
m_roomName(roomName), m_roomDescr(roomDescr),
m_specDescr(specDescr), m_isSpecDescr(isSpecDescr) {}


string Room::GetRoomName() const
{
return m_roomName;
}

string Room::GetRoomDes() const
{
return m_roomDescr;
}

bool Room::GetRoomSpecBool() const
{
return m_isSpecDescr;
}

string Room::GetRoomSpec() const
{
return m_specDescr;
}

void Room::SetExitVec(vector<Exit*> exitVec)
{
m_exitVec = exitVec;
}

vector<Exit*> Room::GetExitVec() const
{
return m_exitVec;
}

------------Exit类头是这样的:

#ifndef EXIT_H_INCLUDED
#define EXIT_H_INCLUDED

#include <iostream>
#include <string>
#include <vector>
class Room; // For using a class pointer as a data member

using namespace std;


class Exit
{
private:
string m_exitName; // east, west, etc
Room* mp_exitTo;
bool m_isExit;
bool m_isExitHidden;
bool m_isExitPhrase;
string m_exitPhrase;

public:
Exit();
Exit(string exitName, Room* pExit, bool isExit, bool isExitHidden,
bool isExitPhrase = false, string exitPhrase = "");


string GetExitName(); const
Room* GetExitTo(); const
void SetIsExitTrue();
void SetIsExitFalse();
bool GetIsExit(); const
void SetIsExitHiddenTrue();
void SetIsExitHiddenFalse();
bool GetIsExitHidden(); const
bool GetIsExitPhrase(); const
string GetExitPhrase(); const

};



#endif // EXIT_H_INCLUDED

------------及其cpp文件:

#include "room.h"
#include "exit.h"
#include "RoomsInit.h"


Exit::Exit() :
mp_exitTo(NULL), m_isExit(false), m_isExitHidden(false) {}

Exit::Exit(string exitName, Room* pExit, bool isExit, bool isExitHidden,
bool isExitPhrase, string exitPhrase) :
m_exitName(exitName), mp_exitTo(pExit), m_isExit(isExit),
m_isExitHidden(isExitHidden), m_isExitPhrase(isExitPhrase),
m_exitPhrase(exitPhrase) {}



string Exit::GetExitName() const
{
return m_exitName;
}

Room* Exit::GetExitTo() const
{
return mp_exitTo;
}

void Exit::SetIsExitTrue()
{
m_isExit = true;
}

void Exit::SetIsExitFalse()
{
m_isExit = false;
}

bool Exit::GetIsExit() const
{
return m_isExit;
}

void Exit::SetIsExitHiddenTrue();
{
m_isExitHidden = true;
}

void Exit::SetIsExitHiddenFalse();
{
m_isExitHidden = false;
}

bool Exit::GetIsExitHidden() const
{
return m_isExitHidden;
}

bool Exit::GetIsExitPhrase(); const
{
return m_isExitPhrase;
}

string Exit::GetExitPhrase() const
{
return m_exitPhrase;
}

我还收到 21 条警告,指出我在堆上创建的房间是未使用的变量 - 不确定那是什么意思。我觉得我错过了一些关于#includes 关系的重要信息,但我只是看不到它是什么......我只编程了大约 8 个月,我遇到的大多数例子书本或网上的内容比我现在正在做的要简单一些。因此,我非常感谢所有更有经验的人提出的任何建议或意见。谢谢。 - 标记

最佳答案

在房间里.h

   string GetRoomName(); const
string GetRoomDes(); const
bool GetRoomSpecBool(); const
string GetRoomSpec(); const

void SetExitVec(vector<Exit*> exitVec);
vector<Exit*> GetExitVec(); const

应该是

   string GetRoomName() const;
string GetRoomDes() const;
bool GetRoomSpecBool() const;
string GetRoomSpec() const;

void SetExitVec(vector<Exit*> exitVec);
vector<Exit*> GetExitVec() const;

你的分号放错地方了。

关于c++ - 类对象作为数据成员和头文件包括,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19072702/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com