C++ 没有合适的默认构造函数(无参数构造函数)
本来今天吧,想写一个proxy class的范例,写着写着出了个问题,见如下代码
const int _cap = ;
Array1D* _elemArray = new Array1D[_cap];
同时我为Array1D这个类写了一个构造函数来顶替编译器自动生成的
Array1D(int inx)
{
_elemNum = new T[inx];
}
随后报错,提示没有合适的默认构造函数,但是显然,我这里是提供了一个构造函数的,那么问题就出在现有的构造函数不能应对上面的new语句
联系vector的构造:vector<int>* vec = new vector<int>[20](25); 20是一个vector数组的长度,25是数组中每个vector的长度,则我们可以知道,这里面应该传递了有三种信息:
1.对new分配内存来说,申请内存的对象类型是个vector
2.一共有20个这样的对象
3.25作为这些对象的构造函数的第一个参数传入
那么根据new Array1D[_cap]来看,_cap并不是作为一个参数传递给了Array1D这个类的构造函数,而是作为new函数的一个参数分配内存所用
也就是说,上述的代码可以这样看new(Array1D,_cap,③);
其中的③应该是传递给构造函数的参数
则显然,上面我提供的构造函数必须要有一个参数存在(因为没有使用默认值,事实上这个问题如果给inx一个默认值就不需要提供一个新的无参数构造函数了,不过分离这个问题出来对理解C++的构造函数更有帮助,我觉得使用默认值有点绕开这个问题的意思(逃)),但最上面的代码并没有提供这一参数,故此处实际上是需要一个没有参数的构造函数添加进代码(在此代码中实际上也没需要,空函数体也没问题),之后便通过了编译。
C++ 没有合适的默认构造函数(无参数构造函数)的更多相关文章
- C++构造函数的自动调用(调用一个父类的构造函数,有显性调用最好,否则就默认调用无参数的构造函数)——哲学思想:不调用怎么初始化父类的成员数据和VMT?
我总是记不住构造函数的特点,关键还是没有领会那个哲学思想:父类的构造函数一方面要初始化它自己的成员数据,另一方面也要建立它自己的VMT呀!心里默念一百遍:一定调用父类构造函数,一定调用父类构造函数,一 ...
- “T”必须是具有公共的无参数构造函数的非抽象类型,才能用作泛型类型或方法
最近在项目中,使用EF编程时,在使用泛型类型的过程中,写了一上午,结果生成时,编译不通过,报出如下错误: “T”必须是具有公共的无参数构造函数的非抽象类型,才能用作泛型类型或方法.如图: 找了好久,终 ...
- .Net Framework 4.5.1 ASP.NET MVC 5 下新建视图报“错误 运行所选代码生成器时出错 无法检索元数据 没有为该对象定义无参数构造函数”
当在控制器中新建视图的时候,选择的视图界面如下: 执行添加后报如下错误: 错误的内容为: 错误运行所选代码生成器时出错 无法检索"XXX"的元数据没有为该对象定义无参数构造函数 U ...
- __destruct()析构函数的执行时刻 __construct()构造函数传入参数 构造函数与后台登录安全
<?php class test_construct_avg { function __construct($input = '') { $this->input = $input; } ...
- c++类大四个默认函数-构造函数 析构函数 拷贝构造函数 赋值构造函数
每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数).对于任意一个类A,如果不编写上述函数,C++编译器将自动为A 产生四个缺省的函数,例如: A ...
- <转载>构造函数与拷贝构造函数
原文地址http://www.cnblogs.com/waynelu/archive/2012/07/01/2572264.html 构造函数 构造函数.析构函数与赋值函数是每个类最基本的函数. 对于 ...
- Python,JAVA中子类的构造函数与父类构造函数的关系
Python: 子类不重载.覆盖父类的构造函数(子类不自己定义构造函数),则构造子类时会调用父类构造函数 若子类覆盖了父类的构造函数,则构造子类时不执行父类的构造函数,但仍继承了父类,如需调用父类构造 ...
- C++构造函数和拷贝构造函数详解
构造函数.析构函数与赋值函数是每个类最基本的函数.它们太普通以致让人容易麻痹大意,其实这些貌似简单的函数就象没有顶盖的下水道那样危险. 每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含 ...
- C++类构造函数、拷贝构造函数、复制构造函数、复制构造函数、构造函数显示调用和隐式调用
一. 构造函数是干什么的 class Counter { public: // 类Counter的构造函数 // 特点:以类名作为函数名,无返回 ...
随机推荐
- jQuery 获得内容
地址 text() - 设置或返回所选元素的文本内容 html() - 设置或返回所选元素的内容(包括 HTML 标记) val() - 设置或返回表单字段的值 一.text() html() &l ...
- Java程序设计——不一样的开始 IP地址判定
不一样的开始 其实,写报告,很烦人,但是着实很有用. 报告不但是自己复习回顾的数据库,还是团队合作,技术提高的加速器,认真对待报告,认真对待自己的行业,把他看作自己安身立命的对象. IP地址判定 [问 ...
- Unity中的动画系统和Timeline(5) Timeline
在前面的动画,都是控制单独的物体,比如说控制一个角色的运动.而Timeline,可以对多个物体实施动画,形成过场动画,或者电影效果.比如,很多赛车游戏比赛开始前都会播放一段开场动画,围绕自己车的几个方 ...
- python学习之数据类型(set)
3.9 集合(set) 3.9.1 介绍 集合是一个无序且不重复的元素集合.元素必须是可哈希的(int,str,tuple,bool).可以把它看作是dic的key的集合.用{}表示. 注意: ...
- 配置本地访问远程Linux系统服务器的jupyter notebook
环境情况 远程服务器上配置了anaconda 本地主机没有安装anaconda(其实安不安装都无所谓,有浏览器就行) 配置步骤如下 登录远程服务器 生成配置文件 jupyter notebook -- ...
- python基础--面向对象初始
# 类与对象,类是类别.种类,是面向对象设计中最重要的概念, # 对象是特征与技能的结合体, # 类是一系列对象相似特征与技能的结合体 # 例如:人是一个类,而我本人是一个对象,手,脚,是我的特征, ...
- 【VS开发】【智能语音处理】VS中声音的采集实现
vc中声音的采集是用api函数来实现的. 一.数字音频基础知识 Fourier级数: 任何周期的波形可以分解成多个正弦波,这些正弦波的频率都是整数倍.级数中其他正线波的频率是基础频率的整数倍.基础 ...
- vs资源视图加载失败
原因:引用了未知的资源,通过打开时报的错可以定位然后修改
- hive排错
找出错的那个hive实例,看错误日志: 点下面stdout,找Error
- hibernate update-->参数绑定
Hibernate 更新数据库 参数绑定总结: 一.query.setParameter(属性名,真实值,类型); String hql="update User u set u.userN ...