代码之家  ›  专栏  ›  技术社区  ›  JeyJ

无法将参数1从“int”转换为“int&”

c++
  •  3
  • JeyJ  · 技术社区  · 6 年前

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

    错误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 回复  |  直到 6 年前
        1
  •  7
  •   R Sahu    6 年前

    使用时 s(5); 左值 G&

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

      int x = 5;
      s(x);
      
    2. G G&& G const&

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