当我尝试在我的mingw32编译器上编译此代码时,我没有得到匹配的成员函数错误
#include <iostream>
using std::cout;
template <class T>
class Pattern
{
public:
Pattern(): element(){
cout<< "default c-tor";
}
Pattern(Pattern ©): element(copy.element){
cout<< "copy c-tor";
}
Pattern& operator=(Pattern &assgn)
{
cout<<" assignment operator";
element = assgn.element;
return *this;
}
~Pattern(){
cout<<"destructor";
}
private:
T element;
};
template <class T>
Pattern<T> creator()
{
cout<< "Testing creator";
Pattern<T> pat;
return pat;
}
int main()
{
Pattern<double> pt1(creator<double>());
Pattern<double> pt2 = creator<double>();
}
有人请告诉我如何解决问题。
答案 0 :(得分:2)
更改如下:
Pattern(Pattern const ©): element(copy.element){
RValues(例如创建者函数实例化返回的那些)只能绑定到C ++ 03中的“对const的引用”。
顺便说一下,有些东西给了我一种感觉,你希望你的主要第二行调用赋值运算符。这是不正确的。尽管它出现了这个声明,但它会调用复制构造函数来创建pt2。编辑2:
$ 8.5 / 14-“初始化 以
的形式出现T x = a;
以及 在参数传递中,函数返回, 抛出异常(15.1),处理 例外(15.3)和汇总 成员初始化(8.5.1)是 称为复制初始化。“
答案 1 :(得分:1)
您的copy c-tor
和assignment operator
[{1}}班级]将参数作为Pattern
参考。
non-const
生成临时(对象),临时对象不能绑定到非const引用。所以你得到了那些错误。
ISO C ++ 03 [creator<double>()
]
否则,引用应为非易失性const类型(即 cv1应为const )。
[实施例:双&安培; rd2 = 2.0; //错误:不是左值和引用不是const
尝试将参数(复制c-tor和赋值运算符)作为8.5.3/5
引用传递。