没有可行的超载' ='在C ++向量中

时间:2018-03-17 06:47:30

标签: c++ xcode c++11 vector

我试图通过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);
}

3 个答案:

答案 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)