我正试图通过DeerPark.cpp将game.cpp/..hpp中的bool向量、条目更改为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);
}
发布于 2018-03-16 23:03:08
在DeerPark::feed
中,input
参数是一个vector<bool>*
指针,因此input[1]
将是对vector<bool>
的引用,而vector<bool>::operator=
不接受bool
值。这就是为什么编译器抱怨“没有可行的重载'='”。
解决这个问题的正确方法是取消对指针的引用:
(*input)[1]=true;
DeerPark::get
也有同样的问题(在修复了Input
应该是input
的错误之后)。
发布于 2018-03-16 22:59:55
现在看来,您正在使用大写的Input[0]
编写I
,而实际上参数名为input
。您正在尝试分配给不存在的东西。
具体如下:
void DeerPark::get(Character *person, vector<bool>*input)
{
Input[0] = true;
}
将其更改为(*input)[0] = true;
而且,就像其他人指出的那样,由于它是作为指针传递的,所以必须取消对向量的引用,然后才能下标。在上面的片段中也显示了。否则,您将尝试将指针分配给指针。总之,是一个错误和一个间接错误。
发布于 2018-03-16 23:02:49
vector<bool>*input
函数参数是指向vector
的指针,因此要访问第一个元素,需要编写(*input)[0]
。或者(更好的)通过引用:
void DeerPark::feed(Character *person, vector<bool> & input)
https://stackoverflow.com/questions/49333326
复制相似问题