C++ 无法将参数1从';int';至';国际及';
我收到下一个错误,但我找不到原因: 错误C2664“void SumID::operator()(G&”):无法将参数1从“int”转换为“int&” 为什么通过引用传递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; }
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);
将参数类型更改为justG
、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;
}
如果将其放入变量中,则可以执行此操作。Just5
是一个常量值,不能赋值。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;
}