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

Jey*_*eyJ 3 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;
    }
};
Run Code Online (Sandbox Code Playgroud)

我的主要:

SumID<long> s;
for (int i = 0; i < 5; i++)
    s(5); // <-- error here
Run Code Online (Sandbox Code Playgroud)

R S*_*ahu 7

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

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

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

    int x = 5;
    s(x);
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将参数类型更改为just G,G&&G const&.

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