gpt4 book ai didi

c++ - 我正在尝试通过打印来检查类 vector 的 setter/getter 是否正常工作,但它不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 13:07:10 24 4
gpt4 key购买 nike

我创建了一个名为“Item”的类和一个名为“Room”的类,Room 中有一个名为“Items”的 Item 类型 vector 。我在 Item vector 中添加了一些 Items 并尝试为该 Item Vector 创建一个 getter。现在我正在尝试打印 getter 以查看它是否真的得到了我想要的东西,但是当我尝试一种方法时它会给我一条错误消息,或者当我尝试另一种方法时它什么也不打印。我做错了什么?

Room.h 有一些东西以及这些代码行:

.....
///Getters

//get a list of the items currently in the room
vector<Item> GetItems();

private:

///properties

string RoomName;
string RoomDescription;
vector <Door> Doors;
vector <Item> Items;

Room.cpp 包含定义默认和重载房间并为房间提供一些项目的东西,还有这些:

vector<Item>Room::GetItems()
{
return Items;
}

int Room::GetItemAmount()
{
return Items.size();
}

main.cpp 有一些 push.backs 和东西,看起来这些项目正确地包含在 vector 中。现在我不确定如何为它打印 setter/getter ......试试这个:

Room FunStoneRoom = Room();

FunStoneRoom.AddItem(ItemCharcoal);

for (unsigned int VectorPos = 0; VectorPos < FunStoneRoom.GetItemAmount(); VectorPos++)
{
cout << FunStoneRoom.GetItems[VectorPos] << " ";
}

cout << endl;

这给了我一个错误:严重性代码描述项目文件行抑制状态错误 C3867 'Room::GetItems': 非标准语法;使用 '&' 创建指向成员 ConsoleApplication25 d:\tiltan\visual studio\ownclasses\room+item+door\consoleapplication25\main.cpp 51 的指针

我也试过:

for (unsigned int VectorPos = 0; VectorPos < FunStoneRoom.GetItemAmount(); VectorPos++)
{
FunStoneRoom.GetItems()[VectorPos];
}

cout << endl;

它不会给出错误,只是打印一个空行。和:

for (unsigned int VectorPos = 0; VectorPos < FunStoneRoom.GetItemAmount(); VectorPos++)
{
cout << FunStoneRoom.GetItems()[VectorPos];
}

cout << endl;

用红线标记我的 << 并告诉我没有运算符“<<”匹配这些操作数...我该怎么做?我真的不是那么高级,不知道很多复杂的功能和代码等等,所以请尽量简单一点。我也是新来的,很抱歉,如果我没有正确发布或解释自己...

编辑:根据要求 - 我正在添加 item.h 和 item.cpp 但请记住我不需要知道它们包含什么,只需要 vector 中的项目列表:项目.h:

#pragma once
#include <string>
#include <iostream>

using namespace std;

class Item
{
public:

///constructors
Item(); //default item


///overloadeds

//overloaded customizable items
// @param string = Item Name
// @param string = Item Description
Item(string, string);


///destructors
~Item();

///methods

//Display item name and description
void ViewItem();

//Set a new Item Description
void SetItemDescription(string);

//Set a new Item Name
void SetItemName(string);

//Get an Item's name
string GetItemName();

//Get an Item's description
string GetItemDescription();



private:

///properties

string ItemName;
string ItemDescription;

};

项目.cpp:

#include "Item.h"



Item::Item()
{

Item::ItemName = "Non Material Item";
Item::ItemDescription = "You cannot see, feel, taste, smell or hear this item";

}


Item::Item(string NewItemName, string NewItemDesc)
{

NewItemName[0] = toupper(NewItemName[0]);
Item::ItemName = NewItemName;
Item::ItemDescription = NewItemDesc;


}


Item::~Item()
{

}


void Item::ViewItem()
{

cout << ItemName << endl;
cout << ItemDescription << endl;

}

void Item::SetItemDescription(string NewItemDescription)
{

if (NewItemDescription.length() < 100)
{
NewItemDescription[0] = toupper(NewItemDescription[0]);
ItemDescription = NewItemDescription;
}

else
{
ItemDescription = "This Item's description is too long";
}
}


void Item::SetItemName(string NewItemName)
{

if (NewItemName.length() < 30)
{
NewItemName[0] = toupper(NewItemName[0]);
ItemName = NewItemName;
}

else
{
ItemDescription = "This Item's name is too long";
}

}

string Item::GetItemName()
{
return ItemName;
}

string Item::GetItemDescription()
{
return ItemDescription;
}

最佳答案

关于您的第一个问题,我在这里引用......

Room FunStoneRoom = Room();

FunStoneRoom.AddItem(ItemCharcoal);

for (unsigned int VectorPos = 0; VectorPos < FunStoneRoom.GetItemAmount(); VectorPos++)
{
cout << FunStoneRoom.GetItems[VectorPos] << " ";
}

cout << endl;

This gives me an error : Severity Code Description Project File Line Suppression State Error C3867 'Room::GetItems': non-standard syntax; use '&' to create a pointer to member ConsoleApplication25 d:\tiltan\visual studio\ownclasses\room+item+door\consoleapplication25\main.cpp 51

在这种情况下,原因是缺少 ()电话 GetItems .编译器将此视为试图获取指向成员函数 Room::GetItems 的指针。 (因为类似的语法,当应用于非成员函数时,会将函数的名称转换为指向该函数的指针)。这是一个错误,因为指向成员函数的指针不是以这种方式获得的。

关于你的第二个问题,我在这里引用

I also tried:

for (unsigned int VectorPos = 0; VectorPos < FunStoneRoom.GetItemAmount(); VectorPos++)
{
FunStoneRoom.GetItems()[VectorPos];
}

cout << endl;

which doesn't give an error but just prints an empty line.

在这种情况下,您看到的行为是正确的。在循环中,您删除了 cout << , 但仍然惊讶于它没有产生任何输出。 Room::GetItems()不产生输出 - 它返回 std::vector<Item> .使用 operator[]() 从 vector 中检索元素, 获得对相应 Item 的引用, 所以也不产生输出。

and:

for (unsigned int VectorPos = 0; VectorPos < FunStoneRoom.GetItemAmount(); VectorPos++)
{
cout << FunStoneRoom.GetItems()[VectorPos];
}

cout << endl;

which marks my << with a red line and tells me no operator "<<" matches these > operands...

这里的代码和前面的一样,只是你重新插入了cout <<在循环。这会导致编译器尝试查找并调用 operator<<()编写 Item 的函数到输出流。您的代码没有声明这样的函数,因此编译器无法找到它。

您需要创建这样一个函数。需要在item.h中声明并在 item.cpp 中定义(实现) .这些文件不包含此类声明。

现在我们来请求您的帮助(我已经给了您)。

How do i go about this? I'm really not that advanced and don't know a lot of complicated functions and codes and whatnot so please try to be as simple as u can with me.

我要直言不讳。你是你自己问题的根源。

首先,您没有投入足够的精力来解释编译器试图告诉您的内容。编译器是一些无知的软件,但在他们的无知中,他们相当一致地提示特定类型的错误。因此,您需要努力理解编译器的错误消息。否则,当编译器拒绝时,您将永远无法修复自己的代码。

然后,您通过随机更改代码并希望修复它而不是进行合理的更改来使问题复杂化。其结果要么是您不理解的行为(如果代码编译并运行),要么是您无法理解的编译器错误消息,除非您了解您实际所做的更改。

当你与一个确定的无知者(编译器)打交道时,你不能无知。

关于c++ - 我正在尝试通过打印来检查类 vector 的 setter/getter 是否正常工作,但它不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41669457/

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