通过 C++ 中的外部函数更改存储在另一个对象的向量中的对象中元素的值
Posted
技术标签:
【中文标题】通过 C++ 中的外部函数更改存储在另一个对象的向量中的对象中元素的值【英文标题】:Changing a value of an element in an object that is stored in a vector in another object through an external function in C++ 【发布时间】:2018-12-02 19:32:35 【问题描述】:所以创建了一个名为“Item”的类,该类的对象在开始时将具有 100% 的条件,玩家在我告诉他时存储项目(在本例中名为“apple”)。在 degradeT 函数中,我想传递包含玩家迄今为止拾取的项目的整个向量,然后通过 chCond 函数将该向量中每个项目的条件更改为 -1。
第一个错误:
initial value of reference to non-const must be an lvalue
第二个错误:
'void degradeT(std::vector<Item,std::allocator<_Ty>> &)': cannot convert argument 1 from 'std::vector<Item,std::allocator<_Ty>>' to 'std::vector<Item,std::allocator<_Ty>> &'
#include "pch.h"
#include <iostream>
#include <string>
#include <vector>
using std::cout; using std::cin; using std::endl;
using std::string; using std::vector; using std::to_string;
class Item
private:
string name; // Item name
float condition; // Item condition
bool consumable; // Is the item consumable
public:
Item()
Item(string a, float b, bool c) name = a; condition = b; consumable = c;
Item(string a, bool c) name = a; condition = 100.f; consumable = c;
string getName()
return name;
float getCond()
return condition;
bool isCons()
return consumable;
void chCond(float a) // Change Item condition
condition += a;
;
//-----------------------
class Player
private:
vector<Item> plItems; // Item container
public:
Player()
void pickUpItem(Item a) // Adding Items to inventory
plItems.push_back(a);
cout << a.getName() << " added to inventory!\n";
void checkItemConds() // Checking condition of all items
for (unsigned int a = 0, siz = plItems.size(); a < siz; a++)
cout << plItems[a].getName() << "'s condition is: " << plItems[a].getCond() << "%\n";
Item returnItem(unsigned int a) // Return a specific Item
return plItems[a];
int getCurInvOcc() // Get cuurent inventory occupation
return plItems.size();
vector<Item> getPlItems() // Return the vector (Item container)
return plItems;
;
//-------------------------
void degradeT(vector<Item>& Itemss); // Degrade item after some time
//-------------------------
int main()
Player me; // me
string inp; // input
int num = 1; // apple 1, apple 2, apple 3...
while (inp != "exit")
cin >> inp;
if (inp == "addApple")
Item apple(("apple " + to_string(num)), true);
me.pickUpItem(apple);
num++;
if (inp == "checkItemConds")
me.checkItemConds();
if (inp == "timeTick")
// This doesn't have anything to do with time I just want to test the function manually
degradeT(me.getPlItems());
system("PAUSE");
return 0;
void degradeT(vector<Item> &Itemss)
for (unsigned int a = 0, siz = Itemss.size(); a < siz; a++)
Itemss[a].chCond(-1);
cout << Itemss[a].getName() << endl;
【问题讨论】:
【参考方案1】:我不确定您的问题是什么,但您的错误与函数void degradeT(vector<Item> & Itemss)
有关。
此函数需要一个引用,但您传递的是一个 r 值。您可以使用getPlItems()
返回引用,也可以将左值传递给degradeT
。
【讨论】:
以上是关于通过 C++ 中的外部函数更改存储在另一个对象的向量中的对象中元素的值的主要内容,如果未能解决你的问题,请参考以下文章