错误C2677:二进制'+ =':找不到采用“电影”类型的全局运算符(或者没有可接受的转换)

时间:2016-04-06 22:00:36

标签: c++

我正在尝试创建一个将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,就像我使用-=方法一样,代码就会被编译。

2 个答案:

答案 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是什么,但是(根据您的症状)可能有一些类型+=定义intElement没有定义resizeArray();

NB。与编译错误无关,但operator+=应位于operator+=内,否则(假设此函数是在数组中留出空间所必需的),当有人调用addElem时,您将占用空间而不是style="height: 150px;"