类模版中无法初始化导致报错——C++学习

文章目录

  • 原因
    • 关键代码
      • 测试代码
  • 错误
  • 结论
  • 疑问:为什么在c++中初始化数组的时候会调用构造函数?明明初始化是一个空数组!(希望有大佬可以评论区回答一下,我还没找到答案)
  • 附页

踩坑记录,类模版中无法初始化导致报错

原因

关键代码

这里使用了template,用泛型去表达传入参数类型。
主要问题在于 this->pAddress = new T[this->m_Capacity]; 这一句


template<class T>
class MyArray {
public://初始化容量 有参构造//explicit标记是构造函数不会做隐式转化explicit MyArray(int m_capacity) {std::cout << "构造函数执行" << endl;this->m_Size = 0;this->m_Capacity = m_capacity;//主要问题在这this->pAddress = new T[this->m_Capacity];}private:T *pAddress; //指针指向堆区开辟的地址int m_Capacity; //数组容量int m_Size;
};

测试代码

MyArray<int> arra1(5); 测试使用int基本类型没有问题

使用泛型为类(非基本类型时报错)

//测试自定义数据类型
class Person {
public:// Person() = default;Person(const string name, int age): name(name),age(age) {}string name;int age;
};int main(int argc, char *argv[]) {// MyArray<int> arra1(5);// for (int i = 0; i < 5; ++i) {//     //尾插法,插入数据//     arra1.Push_Back(i);// }// print(arra1);// cout << "容量:" << arra1.m_capacity() << endl;MyArray<Person> arra1(10);for (int i = 0; i < 5; ++i) {//尾插法,插入数据string name = "张三";Person p1(name.append(std::to_string(i)), 10 * i);arra1.Push_Back(p1);}print(arra1);cout << "容量:" << arra1.m_capacity() << endl;cout << "大小:" << arra1.m_size() << endl;
}

错误

从前面可以看到是MyArray构造函数调用出错,说明是Person p1(name.append(std::to_string(i)), 10 * i);调用这一行出现问题。

继续看下面报错,错误指向Person构造函数参数不够!

查看代码,果然没写无参构造函数,当加上Person() = default;就不会出现问题。

In file included from /Users/mac/CLionProjects/stl/main.cpp:3:
/Users/mac/CLionProjects/stl/MyArray.hpp:20:30: error: no matching constructor for initialization of 'Person[]'this->pAddress = new T[this->m_Capacity];^
/Users/mac/CLionProjects/stl/main.cpp:42:21: note: in instantiation of member function 'MyArray<Person>::MyArray' requested hereMyArray<Person> arra1(10);^
/Users/mac/CLionProjects/stl/main.cpp:7:7: note: candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 0 were provided
class Person {^
/Users/mac/CLionProjects/stl/main.cpp:7:7: note: candidate constructor (the implicit move constructor) not viable: requires 1 argument, but 0 were provided
/Users/mac/CLionProjects/stl/main.cpp:11:5: note: candidate constructor not viable: requires 2 arguments, but 0 were providedPerson(const string name, int age)^
1 error generated.

结论

说明在初始化Tthis->pAddress = new T[this->m_Capacity];的时候是会调用对应类的构造函数的。

添加上构造函数解决问题!

疑问:为什么在c++中初始化数组的时候会调用构造函数?明明初始化是一个空数组!(希望有大佬可以评论区回答一下,我还没找到答案)

附页

C++中若类中没有默认构造函数,如何使用对象数组

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/387720.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pycharm怎么使用Anaconda和配置

打开Anaconda Prompt 要删除 Conda 环境 yolov5sconda&#xff0c;你可以使用以下命令&#xff1a; conda remove --name yolov5sconda --all这个命令会删除名为 yolov5sconda 的整个环境&#xff0c;包括其中安装的所有包和依赖项。请在命令提示符或终端中运行此命令。执行此…

使用Spring Boot与Spire.Doc实现Word文档的多样化操作

​ 博客主页: 南来_北往 系列专栏&#xff1a;Spring Boot实战 前言 使用Spring Boot与Spire.Doc实现Word文档的多样化操作具有以下优势&#xff1a; 强大的功能组合&#xff1a;Spring Boot提供了快速构建独立和生产级的Spring应用程序的能力&#xff0c;而Spire.Doc则…

基于Hadoop的服装电商数据分析系统【Hdfs、flume、HIve、sqoop、MySQL、echarts】

文章目录 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主项目介绍总体研究方向数据集介绍配置flume文件HIve建表HIveSQL大数据分析MySQL建表Sqoop命令导出数据到MySQL数据可视化店铺销售情况.......等 总结每文一语 有需要本项目的代码或文档以及全…

UDP服务器端bind失败问题

本人使用microchip芯片开发&#xff0c;使用UDP虚拟机通讯&#xff0c;经常提示bind失败&#xff0c;返回-1&#xff0c;尝试了以前UDP作为客户端使用时正常&#xff0c;故硬件链路没问题。 一、可能有几个原因&#xff1a; 端口实际上被占用&#xff1a;最明显的原因是端口真…

短视频矩阵系统搭建教程,源码获取,部署上线指南

目录 一、短视频矩阵是什么&#xff1f; 二、搭建教程 1、前端界面开发 2、后端架构搭建 3、第三方视频平台对接 三、部分代码展示 一、短视频矩阵是什么&#xff1f; 短视频矩阵系统是一种集成了多元短视频平台功能的综合性管理工具&#xff0c;它汇聚了多个视频发布渠…

【Git】.gitignore全局配置与忽略匹配规则详解

设置全局配置 1&#xff09;在C:/Users/用户名/目录下创建.gitignore文件&#xff0c;在里面添加忽略规则。 如何创建 .gitignore 文件&#xff1f; 新建一个.txt文件&#xff0c;重命名&#xff08;包括后缀.txt&#xff09;为 .gitignore 即可。 2&#xff09;将.gitignore设…

ubuntu2204安装elasticsearch7.17.22

下载安装 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.22-amd64.deb wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.22-amd64.deb.sha512 shasum -a 512 -c elasticsearch-7.17.22-amd64.deb.sha512 su…

yolov8标注细胞、识别边缘、计算面积、灰度值计算

一、数据标注 1. 使用labelme软件标注每个细胞的边界信息&#xff0c;标注结果为JSON格式 2. JSON格式转yolo支持的txt格式 import json import os import glob import os.path as osp此函数用来将labelme软件标注好的数据集转换为yolov5_7.0sege中使用的数据集:param jsonfi…

Widget自定义动画按钮实战(鼠标进入则放大,离开恢复)

目录 引言 准备工作 步骤一&#xff1a;创建项目和基础控件 步骤二&#xff1a;设计UI 步骤三&#xff1a;自定义按钮类&#xff08;AniBtn&#xff09; 步骤四&#xff1a;在主窗口中使用自定义按钮 步骤五&#xff1a;编译和运行 总结 引言 在Qt开发中&#xff0c;自…

26K star!LLM多智能体AutoGen教程1:让两个Agent给我说相声

在继我们的上篇精彩文章[100行代码演绎AI版“狼人杀”-伟大的人类竟因展现出的战争哲学和领导力出局]演示多智能体协作玩游戏后&#xff0c;展示了多智能体协作的魅力后&#xff0c;你应该已对构建这类创新游戏应用满怀好奇。实际上&#xff0c;AutoGen的舞台远不止于此&#x…

yolov10在地平线旭日X3派上的部署和测试(Python版本和C++版本)

0、搭建开发环境 当前的测试根据一下的步骤并修改源码是可以实现yolov8的板端运行&#xff0c;如果不想再搭建环境和测试代码bug上浪费更多的时间可以直接获取本人的测试虚拟机&#xff0c;所有的测试代码、虚拟环境和板端测试工程以全部打包到了虚拟机&#xff0c;需要的可以…

Spark累加器(Accumulator)

1.累加器类型&#xff1a; 数值累加器&#xff1a;用于计算总和、计数等。布尔累加器&#xff1a;用于计算满足特定条件的次数。自定义累加器&#xff1a;允许定义复杂的聚合逻辑和数据结构。集合累加器&#xff1a;用于计算唯一元素的数量&#xff0c;处理去重操作。 在 Spar…

速看!2024年5月软考通过率解析

根据湖南省工业和信息化厅最新发布的《2024年上半年软考湖南考区工作总结报告》及《考试安全顺利完成的通报》&#xff0c;我们了解到湖南地区在2024年上半年度的软件与信息技术专业人才考试&#xff08;简称“软考”&#xff09;中&#xff0c;报名人数达到了13,762人&#xf…

Kafka知识总结(事务+数据存储+请求模型+常见场景)

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 事务 事务Producer保证消息写入分区的原子性&#xff0c;即这批消…

从零到一:用Go语言构建你的第一个Web服务

使用Go语言从零开始搭建一个Web服务&#xff0c;包括环境搭建、路由处理、中间件使用、JSON和表单数据处理等关键步骤&#xff0c;提供丰富的代码示例。 关注TechLead&#xff0c;复旦博士&#xff0c;分享云服务领域全维度开发技术。拥有10年互联网服务架构、AI产品研发经验、…

【HadoopShuffle原理剖析】基础篇二

Shuffle原理剖析 Shuffle&#xff0c;是指对Map输出结果进行分区、排序、合并等处理并交给Reduce的过程。分为Map端的操作和Reduce端的操作。 Shuffle过程 Map端的Shuffle Map的输出结果首先被缓存到内存&#xff0c;当缓存区容量到达80%&#xff08;缓冲区默认100MB&#xff…

通过进程协作显示图像-C#

前言 如果一个软件比较复杂或者某些情况下需要拆解&#xff0c;可以考试将软件分解成两个或多个进程&#xff0c;但常规的消息传递又不能完全够用&#xff0c;使用消息共享内存&#xff0c;实现图像传递&#xff0c;当然性能这个方面我并没有测试&#xff0c;仅是一种解决思路…

Tekion 选择 ClickHouse Cloud 提升应用性能和指标监控

本文字数&#xff1a;4187&#xff1b;估计阅读时间&#xff1a;11 分钟 作者&#xff1a;ClickHouse team 本文在公众号【ClickHouseInc】首发 Tekion 由前 Tesla CIO Jay Vijayan 于 2016 年创立&#xff0c;利用大数据、人工智能和物联网等技术&#xff0c;为其汽车客户解决…

如何通过 CloudCanal 实现从 Kafka 到 AutoMQ 的数据迁移

01 引言 随着大数据技术的飞速发展&#xff0c;Apache Kafka 作为一种高吞吐量、低延迟的分布式消息系统&#xff0c;已经成为企业实时数据处理的核心组件。然而&#xff0c;随着业务的扩展和技术的发展&#xff0c;企业面临着不断增加的存储成本和运维复杂性问题。为了更好地…

【数据中台】大数据管理平台建设方案(原件资料)

建设大数据管理中台&#xff0c;按照统一的数据规范和标准体系&#xff0c;构建统一数据采集&#xfe63;治理&#xfe63;共享标准、统一技术开发体系、统一接口 API &#xff0c;实现数据采集、平台治理&#xff0c;业务应用三层解耦&#xff0c;并按照统一标准格式提供高效的…