C++向量中没有可行的重载'='
No viable overloaded '=' in C++ vector
我正在尝试通过DeerPark.cpp在game.cpp/.hpp中将我的布尔向量items[0]更改为true。但是,我无法弄清楚为什么Xcode会抛出此错误消息。谢谢大家的时间和帮助。
这是我的错误消息,
No viable overloaded '='
它发生在鹿苑.cpp当我这样做时
input[1]= true; //and
input[0]= true;
游戏.hpp
#include <vector>
#include <iostream>
class Game
{
private:
std::vector<bool> items = std::vector<bool>(3);
public:
int intRange(int min, int max, int input);
void printMenu();
};
游戏.cpp
#include "Game.hpp"
#include <vector>
#include <iostream>
using namespace std;
void Game::printMenu()
{
items[0] = false;
items[1] = false;
items[2] = false;
}
鹿苑.hpp
#include <vector>
#include "Game.hpp"
class DeerPark : public Space
{
protected:
int feedCounter;
public:
DeerPark();
void feed(Character *person, std::vector<bool>*input);
void get(Character *person, std::vector<bool>*input);
void kick(Character *person);
};
鹿苑.cpp
#include "DeerPark.hpp"
#include "Space.hpp"
#include <vector>
#include "Game.hpp"
using namespace std;
DeerPark::DeerPark() : Space()
{
feedCounter = 0;
}
void DeerPark::feed(Character *person, vector<bool>*input)
{
feedCounter = feedCounter + 1;
if(feedCounter == 3)
{
input[1]= true;
}
}
void DeerPark::get(Character *person, vector<bool>*input)
{
Input[0] = true;
}
void DeerPark::kick(Character *person)
{
person->setStrength(-5);
}
在DeerPark::feed
中,input
参数是一个vector<bool>*
指针,因此input[1]
将是对vector<bool>
的引用,并且vector<bool>::operator=
不接受bool
值。这就是为什么编译器抱怨"没有可行的重载'='"。
解决此问题的正确方法是取消引用指针:
(*input)[1]=true;
DeerPark::get
也有同样的问题(在修复了应该input
Input
的拼写错误之后(。
看起来您正在用大写I
编写Input[0]
,而该参数实际上称为 input
。您正在尝试分配给不存在的内容。
具体在这里:
void DeerPark::get(Character *person, vector<bool>*input)
{
Input[0] = true;
}
将其更改为(*input)[0] = true;
此外,正如其他人指出的那样,由于它是作为指针传递的,因此必须先取消引用向量,然后才能对其进行下标。也显示在上面的代码片段中。否则,您将尝试分配给指针。简而言之,错别字和间接错误。
vector<bool>*input
函数参数是指向vector
的指针,因此要访问第一个元素,您需要编写(*input)[0]
。或者(甚至更好(通过引用:
void DeerPark::feed(Character *person, vector<bool> & input)
相关文章:
- 向量保持复数的运算符重载
- 如何在基类指针向量的元素上应用重载的多态函数
- 尝试重载输出运算符时,我无法遍历对象向量
- 重载运算符 + 用于向量:命名空间标准
- C++ 运算符"="重载 - 在 lhs 上获取向量中的所有值,使其等于 rhs 上的双精度值
- 如何用对象向量重载 cin(>>)
- 为什么C++在自定义结构向量时会出现 ostream 重载问题?
- 使用shared_ptr向量重载 ostream 友元运算符
- 使用向量重载 ostream 运算符
- 重载运算符+以添加存储在向量中的类对象
- C++向量中没有可行的重载'='
- 尝试从向量返回对象时出现"没有可行的重载运算符 [] 错误
- 重载 = 自制向量类的运算符
- 在 C++ 中,向量上重载括号运算符
- 重载时读取并插入到向量中 []
- 为什么在重载的 ostream 运算符中引用 lambda 中的向量会导致错误
- 如何重载结构向量的<<
- 重载<<运算符打印向量的前n个值(不是整个向量)
- 将 boost odeint 与 std::map 和自定义向量空间代数一起使用时,没有可行的重载'='
- 重载向量下标运算符以获取字符*或字符串