Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 模板类中没有匹配的函数_C++_Templates_Member Functions_Copy Initialization - Fatal编程技术网

C++ 模板类中没有匹配的函数

C++ 模板类中没有匹配的函数,c++,templates,member-functions,copy-initialization,C++,Templates,Member Functions,Copy Initialization,当我尝试在我的mingw32编译器上编译此代码时,没有得到匹配的成员函数错误 #include <iostream> using std::cout; template <class T> class Pattern { public: Pattern(): element(){ cout<< "default c-tor"; } Pattern(Pattern &copy): element(co

当我尝试在我的mingw32编译器上编译此代码时,没有得到匹配的成员函数错误

#include <iostream> 
using std::cout;
template <class T>
class Pattern
{
public:
    Pattern(): element(){

        cout<< "default c-tor";
        }

    Pattern(Pattern &copy): 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>();
}
#包括
使用std::cout;
模板
阶级模式
{
公众:
模式():元素(){

cout您的
复制c-tor
赋值运算符
[属于
模式
类]将参数作为
非常量
参考

creator()

ISO C++03[
8.5.3/5
]

否则,应参考非易失性常数类型(即,cv1应为常数)。
[示例:

double&rd2=2.0;//错误:不是左值,引用不是常量

尝试将参数(复制c-tor和赋值运算符)作为
const
参考传递。

更改如下:

Pattern(Pattern const &copy): element(copy.element){ 
R值(如创建者函数实例化返回的值)只能绑定到C++03中的“引用常量”

顺便说一句,我觉得您希望main中的第二行调用赋值运算符。这是不正确的。尽管这个语句看起来很像,但它调用了copy构造函数来创建pt2

编辑2:

$8.5/14-“初始化 在表单中发生

tx=a

以及 在参数传递中,函数返回, 抛出异常(15.1),处理 例外情况(15.3)和合计 成员初始化(8.5.1)为 称为复制初始化。“


请正确格式化,使用代码文本上的01010按钮。