没有可用的复制构造函数或复制构造函数声明为“explicit”

       c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\vector(810) : error C2558: struct“ST_WINDPOWER_HIS_THREEWATERFALL_OUT” : 没有可用的复制构造函数或复制构造函数声明为“explicit”

        c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\vector(809) : 编译类模板成员函数“void std::vector<_Ty>::_Insert_n(std::vector<_Ty>::iterator,std::vector<_Ty>::size_type,const _Ty &)”时

with

[

_Ty=ST_WINDPOWER_HIS_THREEWATERFALL_OUT

]

        

       d:\*.h(211) : 参见对正在编译的类模板实例化“std::vector<_Ty>”的引用

        with

[

_Ty=ST_WINDPOWER_HIS_THREEWATERFALL_OUT

]

时间: 2024-10-13 23:29:56

没有可用的复制构造函数或复制构造函数声明为“explicit”的相关文章

关于C++类中的土著民:构造函数,复制构造函数,析构函数

我们初学C++时可能会对类的构造函数,复制构造函数,析构函数有点疑问.整理如下(个人见解,如有错误,还望指正.): 1.构造函数 根据构造函数的定义知它的作用是初始化类的数据成员或内嵌类的对象,所以它的参数表就应该是它要初始化的对象类型.构造函数分三类:默认构造函数.构造函数.委托构造函数. 默认构造函数 默认构造函数没有返回值,没有参数表,没有函数体,如果类内没有显式的定义构造函数,系统会自动生成默认构造函数,如果已经定义了构造函数,但仍需要默认构造函数,可以在默认构造函数参数表后加defau

C++之重载String ----- 构造函数、复制控制、重载操作符

本博文 我们通过 重新实现String类 来说明构造函数,复制控制,重载操作符. 一.构造函数(包括析构函数): 1:默认构造函数: 2:用户自己定义的构造函数 注意:当用户自己定义时,也要明确显示默认构造函数,这是因为,当我们没有定义自己的构造函数时,编译器会为我们自动合成一个,而我们定义了构造函数时,编译器默认构造函数改为我们自己定义的.这时就有可能出现错误: 3:析构函数: 具体声明与实现,代码如下: 1 声明部分: 2 String(); 3 String(const char*s);

复制构造函数(拷贝构造函数)

也许很多C++的初学者都知道什么是构造函数,但是对复制构造函数(copy constructor)却还很陌生.对于我来说,在写代码的时候能用得上复制构造函数的机会并不多,不过这并不说明复制构造函数没什么用,其实复制构造函数能解决一些我们常常会忽略的问题. 为了说明复制构造函数作用,我先说说我们在编程时会遇到的一些问题.对于C++中的函数,我们应该很熟悉了,因为平常经常使用:对于类的对象,我们也很熟悉,因为我们也经常写各种各样的类,使用各种各样的对象:对于指针的操作,我们也不陌生吧?嗯,如果你还不

C++复制控制:拷贝构造函数

一.拷贝构造函数是一种特殊构造函数,具有单个形参,该形参(常用const修饰)是对该类类型的引用.与默认构造函数一样 ,拷贝构造函数可由编译器隐式调用.拷贝构造函数应用的场合为: (1)根据另一个同类型的对象显式或隐式初始化一个对象. (2)复制一个对象将它作为实参传给一个函数. (3)从函数返回时复制一个对象. (4)初始化顺序容器中的元素. (5)根据元素初始化式列表初始化数组元素. 下面分别对以上5点进行说明. 1.对象的定义式. C++支持两种初始化形式:直接初始化和复制初始化.复制初始

C++ Primer 学习笔记_68_面向对象编程 --构造函数和复制控制[续]

面向对象编程 --构造函数和复制控制[续] 三.复制控制和继承 合成操作对对象的基类部分连同派生类部分的成员一起进行复制.赋值或撤销,使用基类的复制构造函数.赋值操作符或析构函数对基类部分进行复制.赋值或撤销. 类是否需要定义复制控制成员完全取决于类自身的直接成员.基类可以定义自己的复制控制而派生类使用合成版本,反之,基类使用合成版本,而派生类使用自己定义的复制控制也可以. 只包含类类型或内置类型的数据成员.不包含指针的类一般可以使用合成操作,复制.赋值或撤销这样的成员不需要使用特殊控制.但是:

何时调用C++复制构造函数和拷贝构造函数(转)

1. 何时调用复制构造函数 复制构造函数用于将一个对象复制到新创建的对象中.也就是说,它用于初始化过程中,而不是常规的赋值过程中.类的复制构造函数原型通常如下: class_name(const class_name&); 它接受一个指向类对象的常量引用作为参数.例如,String类的复制构造函数的原型如下: String(const String&); 新建一个对象并将其初始化为同类现有对象时,复制构造函数都将被调用.这在很多情况下都可能发生,最常见的情况是将新对象显示地初始化为现有的对

C++复制(拷贝)构造函数详解

本文转载自 http://blog.csdn.net/lwbeyond/article/details/6202256,在此感谢作者 CTemp B(A);       //复制构造函数,C++风格的初始化       CTemp B=A;       //仍然是复制构造函数,不过这种风格只是为了与C兼容,与上面的效果一样       在这之前B不存在,或者说还未构造好. CTemp B;       B = A;                //赋值运算符       在这之前B已经通过默认

C++ Primer 学习笔记_68_面向对象编程 -构造函数跟复制控制[续]

面向对象编程 --构造函数和复制控制[续] 三.复制控制和继承 合成操作对对象的基类部分连同派生类部分的成员一起进行复制.赋值或撤销,使用基类的复制构造函数.赋值操作符或析构函数对基类部分进行复制.赋值或撤销. 类是否需要定义复制控制成员完全取决于类自身的直接成员.基类可以定义自己的复制控制而派生类使用合成版本,反之,基类使用合成版本,而派生类使用自己定义的复制控制也可以. 只包含类类型或内置类型的数据成员.不包含指针的类一般可以使用合成操作,复制.赋值或撤销这样的成员不需要使用特殊控制.但是:

初始化数组/容器时,调用默认构造函数还是复制构造函数

当使用数组或容器时,通常会预先分配一定容量.在分配的大小中,都会初始化容器的对象,在初始化第一个时,毫无疑问调用的是默认构造函数,但是当初始化第二个到最后一个时,应该怎么做? 很显然,数组/容器的对象都一模一样,一种方法是:开辟内存,然后在开辟的内存处调用默认构造函数:另一种方法是:开辟内存,构造一个对象,把对象拷贝n份到开辟的内存处(调用复制构造函数).从效率上来说,我认为第二种效率更高,因为调用默认构造的消耗一般大于调用复制构造函数.复制构造函数常常是浅拷贝,这样效率很高. 写代码测试一下,