不能将参数1从'int'转换为'int&'

时间:2018-06-15 22:14:03

标签: c++

我收到了下一个错误,我找不到原因:

  

错误C2664'void SumID< long> :: operator()< int>(G&)':无法将参数1从'int'转换为'int&'

为什么通过引用传递int有问题?

我有下一堂课:

template <class T>
class SumID {
private:
    T sumid;

public:
    SumID():sumid()
    {
    }

    SumID(T s)
    {
        sumid = s;
    }

    T getSumID()
    {
        cout << "inside getSum";
        return sumid;
    }

    template <class G>
    void operator() (G& a)
    {
        sumid = sumid+ a;
    }
};

我的主要:

SumID<long> s;
for (int i = 0; i < 5; i++)
    s(5); // <-- error here

1 个答案:

答案 0 :(得分:7)

使用s(5);时,参数5不是左值。因此,当参数类型为G&时,不能使用它。

您可以使用以下一种或两种方法解决问题。

  1. 创建变量并在调用中使用它。

    int x = 5;
    s(x);
    
  2. 将参数类型更改为GG&&G const&

    template <class G>
    void operator() (G a)  // Or (G&& a) or (G const& a)
    {
       sumid = sumid+ a;
    }