- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我创建了一个名为“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/
因此,我需要获取在为其赋值时调用的 setter 的名称。像这样: var b = {}; var a = { set hey(value) { b[] = value; } } 我希望 se
我是 Android 编程的新手(~ 2 个月)有必要为几十个不同的变量设置 getter 吗? 例如—— //Yes I realise that this isn't 'dozens' publi
import Control.Lens import Control.Lens.TH data Foo = Foo { _bar, _baz :: Int } makeLenses ''
我有点困惑:我可以覆盖 setter/getter 但仍然使用 super setter/getter 吗?如果是 - 怎么办? 用例: class A { void set value(num
我有一个接收消息的应用程序。消息中存在可编辑的字段。当字段更改时,应将其保存到数据库中。不幸的是,setter 仅在 setter 的范围内更改给定字段的值。知道为什么会发生这种情况吗?这是 gett
C# 中有没有一种方法可以让 setter 从“某物”继承,这样每次为特定基类及其继承者调用 setter 时,我都可以运行一些代码? 我想做的是在我的基类上有一个名为 IsValid 的 bool
可能是一个我无法解决的非常简单的问题 - 我从 C# 开始,需要使用 getter/setter 方法向数组添加值,例如: public partial class Form1 : Form {
这两个属性实现有什么区别? public override string A { get { return "s"; } set { } } public override strin
是否可以使用 abc.abstractproperty 创建一个具体的 getter 但将 setter 抽象为每个继承类的不同。我为每个子类处理不同的 val 设置。 例如。 @abstractpr
我在某处看到类似下面的内容,想知道它是什么意思。我知道他们是getter和setter,但是想知道为什么字符串Type是这样定义的。谢谢你帮助我。 public string Type { get;
Public class Example { private int number; public Example(int number){ this.number =
假设我有这样的代码: public response MyMethod(Request req) { String id = req.getFirst().geId(); } 我已经模拟了主对
允许这样做: public int Age { get; set; } 但是应用程序是否为变量创建/分配空间?我经常这样做 private int age = 0; public int Age {
我有一个条件,我构造字符串 (finalValue) 的方式是基于我在输入中获得的非空值的数量。所以我想知道是否可以用一个不同的参数为字符串 (finalValue) 重载 setter 方法并根据我
例如,在这段代码中 var o = { set a(value) {this.b = value}, get a() {return this.b} } 是否有可能获得对 o.a 的 sett
我一直在努力了解 getter 和 setter,但没有深入了解。我读过 JavaScript Getters and Setters和 Defining Getters and Setters只是没
我想在我的类中添加一个 getter 和 setter。然而,setter 应该接收一个 querySelector,但 getter 返回一个新类型 pageSections。 我的问题是 gett
使用有什么好处: private var _someProp:String; public function set someProp(value:String):void { _somePr
当从域类调用它时,我想在我的 setter 中执行一些操作,而不是从 hibernate 中调用它时。此外,我正在使用 session 工厂,因此我无法使用 @PostLoad 来触发标志! 有人对此
人员类别: public class Person { private String firstName; private String lastName; public Pe
我是一名优秀的程序员,十分优秀!