【问题标题】:No viable overloaded '=' in C++ vectorC++ 向量中没有可行的重载“=”
【发布时间】:2018-08-26 06:19:30
【问题描述】:

我正在尝试通过 DeerPark.cpp 在 game.cpp/.hpp 中将我的布尔向量 items[0] 更改为 true。但是,我无法弄清楚为什么 Xcode 会抛出此错误消息。感谢大家的时间和帮助。

这是我的错误信息,

No viable overloaded '='

当我这样做时,它发生在 DeerPark.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);
}

【问题讨论】:

  • 该错误消息肯定有特定的行。
  • @RemyLebeau:如果这确实是问题所在,那么它是实现中的一个错误。 std::vector&lt;bool&gt;::reference 应该已经实现了 operator=(bool)。我怀疑使用中的任何实现都有这样的 ommision。
  • 两个问题:1.- 在函数 get 中,您使用的是指向向量 (vector&lt;bool&gt;*input&gt;) 的指针,并且您使用的是 Input,大写字母“I”.. 2。 - 我假设vector&lt;bool&gt;*input&gt; 被用作Input[x],但它必须作为vector&lt;bool&gt;*input 的许多对象的数组的指针来处理bool 的向量。将您的metido 的定义更改为vector&lt;bool&gt;&amp;input 以传递向量的引用并根据需要使用它。
  • @JorgeOmarMedra:答案部分如下。
  • @JorgeOmarMedra 感谢您的解释!这确实是问题所在。 (*input)[0] 也可以!

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


【解决方案1】:

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

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

(*input)[1]=true;

DeerPark::get 相同的问题(在修复了Input 应为input 的错字之后)。

【讨论】:

    【解决方案2】:

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

    具体来说:

    void DeerPark::get(Character *person, vector<bool>*input)
    {
            Input[0] = true;
    }
    

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

    另外,就像其他人指出的那样,由于它是作为指针传递的,因此您必须先取消对向量的引用,然后才能对其下标。上面的sn-p也显示了。否则,您将尝试分配给指针。简而言之,一个错字和一个间接错误。

    【讨论】:

      【解决方案3】:

      vector&lt;bool&gt;*input 函数参数是指向vector 的指针,因此要访问第一个元素,您需要编写(*input)[0]。或者(甚至更好)通过引用传递:

      void DeerPark::feed(Character *person, vector<bool> & input)
      

      【讨论】:

        猜你喜欢
        • 2015-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-03
        • 2020-10-16
        • 1970-01-01
        相关资源
        最近更新 更多