zoukankan      html  css  js  c++  java
  • C++ 没有合适的默认构造函数(无参数构造函数)

           本来今天吧,想写一个proxy class的范例,写着写着出了个问题,见如下代码

        const int _cap = 10;
        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++的构造函数更有帮助,我觉得使用默认值有点绕开这个问题的意思(逃)),但最上面的代码并没有提供这一参数,故此处实际上是需要一个没有参数的构造函数添加进代码(在此代码中实际上也没需要,空函数体也没问题),之后便通过了编译。

  • 相关阅读:
    指向const的指针和const指针
    c++类中的静态成员
    Vue.js图片预览插件
    vue 报错 Cannot read property '__ob__' of undefined的解决方法
    vue/webpack的一些小技巧
    css强制html不换行 css强制英文单词断行 重拾丢失的
    js将 HTML 页面生成 PDF 并下载
    Vue跨路由触发事件,Vue监听sessionStorage
    ssh 上传文件以及文件夹到linux服务器
    【原创】移动端获取用户公网ip,获取用户ip
  • 原文地址:https://www.cnblogs.com/HotPants/p/11421065.html
Copyright © 2011-2022 走看看