【发布时间】:2015-06-03 23:35:03
【问题描述】:
我正在重载类模板的运算符,我收到错误:Error 1 error C2678: binary '>' : no operator found which take a left-hand operand of type 'const CSet '
CSet.h:
bool CSet<T>::operator>(const CSet<T>& mySet) const{
bool flag = false;
for (int i = 0; i < size; i++){
for (int j = 0; j < mySet.size; j++){
if (arr[i] == mySet[j]){
flag = true;
break;
}
if (j == mySet.size - 1 && flag == false)
return false;
}
}
return true;
}
void CSet<T>::operator+=(T& myVal){
T* temp = new T[size + 1];
for (int i = 0; i < size; i++){
if (arr[i] == myVal){
delete[] temp;
return;
}
}
for (int i = 0; i < size; i++)
temp[i] = arr[i];
delete[] arr;
arr = temp;
arr[size] = myVal;
}
mian.cpp:
#include "Set.h"
int main(){
CSet<int> mySet, yourSet;
mySet += 3; mySet += 4; mySet += 5;
yourSet += 5; yourSet += 4; yourSet += 3;
bool boom;
boom = mySet == yourSet;
}
现在,从错误中我了解到编译器无法将 T 转换为 int。
我的问题是:为什么不呢?这不是模板的全部目的吗?
一定有什么我错过了,因为这没有意义(至少对我来说)。
【问题讨论】:
-
你是如何定义
operator ==的? -
@Alejandro 哦,我完全忘记了那个 xD。它只是检查两组是否相等。要我添加定义吗?
-
虽然与您的问题无关,但您可能希望将
T* temp = new T[size + 1];移动到operator +=中,直到第一个for循环之后。如果您很快就不得不解除分配,为什么还要分配一个数组呢?或者,您可以使用std::vector,std::move您的旧vector进入它,并获得vector的好处! :) -
@Alejandro 有道理,谢谢你的建议。但是,就我喜欢向量而言,我不允许使用它们,因为这是家庭作业,我们有限制。