不能使用“==”运算符比较两个向量
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;
}
现在你的 == 比较可以工作了。
我有一个适用于我的 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;
}
现在你的 == 比较可以工作了。