类模板 - 找不到合适的运算符方法

时间:2016-01-02 16:14:41

标签: c++ class templates generics

我正在尝试使用类模板和运算符覆盖在C ++中实现自己的集合。

我的MySet.h文件中有以下代码:

#include "stdafx.h"
#pragma once
#include <iostream>
#include <string>
using namespace std;
#define DEFAULT_LEN 10

template <class T> class MySet
{
public:
    MySet(int len = DEFAULT_LEN)
    {
        elements = new T[len];
        count = 0;
    }

    ~MySet()
    {
        delete elements;
    }

    MySet<T> operator+(T &element)
    {
        cout << "Some code here!"; //deleted to simplify code, the problem is that this method is not seen in main
        return MySet<T>();
    }

    string writeSet()
    {
        string result = "";
        for (int i = 0;i < count; i++)
        {
            result += elements[i] + ", ";
        }
        return result;
    }

private:
    T* elements;
    int count;
};

这是我的主要内容:

#include "stdafx.h"
#include "MySet.h"

int main()
{
    MySet<int> a = MySet<int>(10);
    cout << a.writeSet();
    a = a + 2;
    a = a + 3;
    a = a + 4;
    cout << a.writeSet();
    return 0;
}

不幸的是,我在填写这些内容时遇到了问题:

a = a + 2;

。输出是:

1>c:\path\main.cpp(11): error C2679: binary '+': no operator found which takes a right-hand operand of type 'int' (or there is no acceptable conversion)
1>  c:\path\myset.h(22): note: could be 'MySet<int> MySet<int>::operator +(T &)'
1>          with
1>          [
1>              T=int
1>          ]

这怎么可能?据我了解,由于T型,MySet<T> operator+(T &element)应该足够了。我错过了什么?

1 个答案:

答案 0 :(得分:4)

必须是:

MySet<T> operator+(const T &element)