C++ 无法将参数1从';int';至';国际及';

C++ 无法将参数1从';int';至';国际及';,c++,C++,我收到下一个错误,但我找不到原因: 错误C2664“void SumID::operator()(G&”):无法将参数1从“int”转换为“int&” 为什么通过引用传递int有问题 我有下一节课: template <class T> class SumID { private: T sumid; public: SumID():sumid() { } SumID(T s) { sumid = s; }

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

错误C2664“void SumID::operator()(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():SumID()
{
}
苏米特(T s)
{
sumid=s;
}
T getSumID()
{
cout当使用
s(5);
参数5不是左值。因此,当参数类型为
G&
时不能使用它

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

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

    int x = 5;
    s(x);
    
  • 将参数类型更改为just
    G
    G&
    G const&

    template <class G>
    void operator() (G a)  // Or (G&& a) or (G const& a)
    {
       sumid = sumid+ a;
    }
    
    模板
    void运算符()(G a)//或(G&&a)或(G const&a)
    {
    sumid=sumid+a;
    }
    

  • 如果将其放入变量中,则可以执行此操作。Just
    5
    是一个常量值,不能赋值。
    5=17;
    的意思是什么?这就是为什么它是错误的原因。使用右值引用
    G&&a
    绑定到临时变量。或参数类型为右值:
    void operator()(G&&a)在C++中,当我通过一个LValk时,我不能通过引用传递变量。为什么把参数的类型设置为G & &并且解决了这个问题?而且,解决方案G&A const也引起了同样的错误。@ JYJJ代码(S)(5)< /Cord>传递rVal.并且它不能绑定到非const引用()。(const G&)
    有效,因为它的const和
    s(G&&)
    有效,因为它不是右值引用,而是具有特殊规则的通用引用()。
    template <class G>
    void operator() (G a)  // Or (G&& a) or (G const& a)
    {
       sumid = sumid+ a;
    }