我试图通过DeerPark.cpp将我的bool向量,items [0]更改为game.cpp / .hpp中的true。但是,我无法弄清楚为什么Xcode会抛出此错误消息。谢谢大家的时间和帮助。
这是我的错误消息,
No viable overloaded '='
当我做
时它会在DeerPark.cpp中发生input[1]= true; //and
input[0]= true;
Game.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();
};
Game.cpp
#include "Game.hpp"
#include <vector>
#include <iostream>
using namespace std;
void Game::printMenu()
{
items[0] = false;
items[1] = false;
items[2] = false;
}
DeerPark.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);
};
DeerPark.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);
}
答案 0 :(得分:3)
您似乎正在使用大写Input[0]
撰写I
,而参数实际上称为input
。您正在尝试分配不存在的内容。
具体来说:
void DeerPark::get(Character *person, vector<bool>*input)
{
Input[0] = true;
}
将其更改为(*input)[0] = true;
此外,正如其他人指出的那样,因为它是作为指针传递的,所以你必须取消引用向量才能下标它。也显示在上面的代码片段中。否则您尝试分配指针。简而言之,这是一个拼写错误和间接错误。
答案 1 :(得分:2)
DeerPark::feed
中,input
参数是vector<bool>*
指针,因此input[1]
将是对vector<bool>
和vector<bool>::operator=
的引用}不接受bool
值。这就是为什么编译器抱怨“没有可行的重载'='”。
解决这个问题的正确方法是取消引用指针:
(*input)[1]=true;
与DeerPark::get
相同的问题(在修正Input
应为input
后的拼写错误之后)。
答案 2 :(得分:0)
vector<bool>*input
函数参数是指向vector
的指针,因此要访问第一个元素,您需要编写(*input)[0]
。或者(甚至更好)通过引用传递:
void DeerPark::feed(Character *person, vector<bool> & input)