首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在C++向量中没有可行的重载“=”

在C++向量中没有可行的重载“=”
EN

Stack Overflow用户
提问于 2018-03-16 22:47:29
回答 3查看 8.9K关注 0票数 1

我正试图通过DeerPark.cpp将game.cpp/..hpp中的bool向量、条目更改为true。但是,我不明白Xcode为什么要抛出这条错误消息。谢谢你们的时间和帮助。

这是我的错误信息

代码语言:javascript
运行
AI代码解释
复制
No viable overloaded '='

它发生在DeerPark.cpp,当我做的时候

代码语言:javascript
运行
AI代码解释
复制
input[1]= true; //and
input[0]= true;

Game.hpp

代码语言:javascript
运行
AI代码解释
复制
#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

代码语言:javascript
运行
AI代码解释
复制
#include "Game.hpp"
#include <vector>
#include <iostream>

using namespace std;
void Game::printMenu()
{
    items[0] = false;
    items[1] = false;
    items[2] = false;
}

DeerPark.hpp

代码语言:javascript
运行
AI代码解释
复制
#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

代码语言:javascript
运行
AI代码解释
复制
#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);
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-03-16 23:03:08

DeerPark::feed中,input参数是一个vector<bool>*指针,因此input[1]将是对vector<bool>的引用,而vector<bool>::operator=不接受bool值。这就是为什么编译器抱怨“没有可行的重载'='”。

解决这个问题的正确方法是取消对指针的引用:

代码语言:javascript
运行
AI代码解释
复制
(*input)[1]=true;

DeerPark::get也有同样的问题(在修复了Input应该是input的错误之后)。

票数 3
EN

Stack Overflow用户

发布于 2018-03-16 22:59:55

现在看来,您正在使用大写的Input[0]编写I,而实际上参数名为input。您正在尝试分配给不存在的东西。

具体如下:

代码语言:javascript
运行
AI代码解释
复制
void DeerPark::get(Character *person, vector<bool>*input)
{
        Input[0] = true;
}

将其更改为(*input)[0] = true;

而且,就像其他人指出的那样,由于它是作为指针传递的,所以必须取消对向量的引用,然后才能下标。在上面的片段中也显示了。否则,您将尝试将指针分配给指针。总之,是一个错误和一个间接错误。

票数 3
EN

Stack Overflow用户

发布于 2018-03-16 23:02:49

vector<bool>*input函数参数是指向vector的指针,因此要访问第一个元素,需要编写(*input)[0]。或者(更好的)通过引用:

代码语言:javascript
运行
AI代码解释
复制
void DeerPark::feed(Character *person, vector<bool> & input)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49333326

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文