不能使用“==”运算符比较两个向量

Cannot use '==' operator to compare two vectors

我有一个适用于我的 Arduino Uno 的程序,但出于某种原因,我得到了错误

no match for 'operator==' (operand types are 'Vector' and 'Vector')

关于我的第二次矢量比较,而不是第一次。

这是代表我的问题的代码。

#include <Vector.h>
void setup() {

}

void loop() {
  Vector<char> tACode; 
  Vector<char> aCode;
  aCode.push_back('0');
  aCode.push_back('0');
  aCode.push_back('0');
  Vector<char> nCode;
  nCode.push_back('0');
  nCode.push_back('0');
  if (tACode == aCode){
  }
  if (tACode == nCode){ 
  }
}

我花了几个小时试图弄清楚为什么会这样,但没有成功。 我将不胜感激第二双眼睛。

取决于您的 Vector class 的定义,它可能没有为它定义 operator==

相反,您可以先比较它们的大小,如果它有访问它的方法,然后比较它们中的每个项目。

查看 Vector 的定义,它没有提供 operator==:

template <typename T>
class Vector
{
public:
    Vector();
    template <size_t MAX_SIZE>
    Vector(T(&values)[MAX_SIZE],
        size_t size = 0);
    template <size_t MAX_SIZE>
    void setStorage(T(&values)[MAX_SIZE],
        size_t size = 0);
    void setStorage(T* values,
        size_t max_size,
        size_t size);
    const T& operator[](size_t index) const;
    T& operator[](size_t index);
    const T& at(size_t index) const;
    T& at(size_t index);
    T& front();
    T& back();
    void clear();
    template <typename U>
    void fill(const U& value);
    template <typename U,
        size_t N>
        void fill(const U(&values)[N]);
    template <typename U>
    void fill(const Vector<U>& values);
    template <typename U>
    void assign(size_t n,
        const U& value);
    template <typename U,
        size_t N>
        void assign(size_t n,
            const U(&values)[N]);
    template <typename U>
    void assign(size_t n,
        const Vector<U>& values);
    void push_back(const T& value);
    void pop_back();
    void remove(size_t index);
    size_t size() const;
    size_t max_size() const;
    bool empty() const;
    bool full() const;
    const T* data() const;
    T* data();
    typedef VectorIterator<T> iterator;
    iterator begin();
    iterator end();
    typedef VectorIterator<const T> const_iterator;
    const_iterator begin() const;
    const_iterator end() const;

private:
    T* values_;
    size_t max_size_;
    size_t size_;
};

但是使用这些方法,您可以在文件的开头定义您自己的 operator==(或放入您自己的文件中):

#include <Vector.h>

template <typename T>
inline bool operator==(const Vector<T>& vector1, const Vector<T>& vector2) {
    if (vector1.size() != vector2.size()) {
        return false;
    }
    for (unsigned i = 0u; i < vector1.size(); ++i) {
        if (vector1[i] != vector2[i]) {
            return false;
        }
    }
    return true;
}

现在你的 == 比较可以工作了。