我正在尝试创建一个将Movie
个对象存储在数组中的泛型类。
我想覆盖+=
和-=
运算符,以便从数组中添加或删除元素。
template<typename Element>
movieArray<Element>& movieArray<Element>::operator-=(int position)
{
// some code here...
return *this;
}
template<typename Element>
void movieArray<Element>::deleteElem(int position)
{
this->elements -= position;
}
删除部分按预期工作。但是,当我为Add操作做同样的事情时:
template<typename Element>
movieArray<Element>& movieArray<Element>::operator+=(const Element &elem)
{
elements[lenght++] = elem;
return *this;
}
template<typename Element>
void movieArray<Element>::addElem(const Element &elem)
{
resizeArray();
this->elements += elem;
}
我收到以下错误:
错误C2677:二进制'+ =':找不到采用“电影”类型的全局运算符(或者没有可接受的转换)
我不确定为什么会这样。
如果我将Element
更改为int
,就像我使用-=
方法一样,代码就会被编译。
答案 0 :(得分:0)
请改为尝试:
template<typename Element>
movieArray<Element>& movieArray<Element>::operator-=(int position)
{
// some code here...
return *this;
}
template<typename Element>
void movieArray<Element>::deleteElem(int position)
{
*this -= position;
}
template<typename Element>
movieArray<Element>& movieArray<Element>::operator+=(const Element &elem)
{
resizeArray();
elements[lenght++] = elem;
return *this;
}
template<typename Element>
void movieArray<Element>::addElem(const Element &elem)
{
*this += elem;
}
或者这个:
template<typename Element>
movieArray<Element>& movieArray<Element>::operator-=(int position)
{
deleteElem(position);
}
template<typename Element>
void movieArray<Element>::deleteElem(int position)
{
// some code here...
}
template<typename Element>
movieArray<Element>& movieArray<Element>::operator+=(const Element &elem)
{
addElem(elem);
return *this;
}
template<typename Element>
void movieArray<Element>::addElem(const Element &elem)
{
resizeArray();
elements[lenght++] = elem;
}
答案 1 :(得分:0)
我们猜测很多,因为你只发布了一小部分代码。但也许你的意思是:
*this += elem;
会调用您所显示的课程重载operator+=
功能,而不是:
this->elements += elem;
会在成员变量+=
上调用elements
。您还没有告诉我们elements
是什么,但是(根据您的症状)可能有一些类型+=
定义int
但Element
没有定义resizeArray();
NB。与编译错误无关,但operator+=
应位于operator+=
内,否则(假设此函数是在数组中留出空间所必需的),当有人调用addElem
时,您将占用空间而不是style="height: 150px;"
。