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

No viable overloaded '=' in C++ vector

本文关键字:重载 向量 C++      更新时间:2023-10-16

我正在尝试通过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)