C++ 模板

devtools/2024/10/17 11:24:56/

 模版收尾

模版的声明和定义不能分离,否则会报错.

写下面三个文件:

Stack.h#pragma once
#include<iostream>
using namespace std;
template <class T>
T Add(const T& left, const T& right);
Stack.cpp#include"Stack.h"
template <class T>
T Add(const T& left, const T& right)
{cout << 1 << endl;return left + right;}
Test.cpp#include"Stack.h"
int main()
{Add(1,2);fun();return 0;
}

运行结果:

 如上图所示,模版的声明和定义分离会出现链接错误。

如果我们正常函数的定义和分离就不会出错,比如下图fun函数:

这是刚开始我们把代码加载进内存,运行之后先执行预处理,预处理把"Stack.h"展开。

展开之后就会在Stack.cpp里面找,但是Stack.cpp里面并没有对模版进行实例化,也就找不到地址:

为什么Add预处理阶段找不到地址呢?这是因为在Stack.cpp也就是定义里面Add没有被实例化:

Add是模版,没有实例化,在预编译阶段找不到地址,但是fun我们一开始就定义了是void类型,所以不管是预处理,编译,链接阶段都可以找到它的地址。

解决方案:

1.显示实例化:

缺点:换类型之后还要重新显示实例化,假设我此时这样写:

Add(1.0, 2.0);

 就会报错:

1>Test.obj : error LNK2019: 无法解析的外部符号 "double __cdecl Add<double>(double const &,double const &)" (??$Add@N@@YANABN0@Z),函数 _main 中引用了该符号

 需要再加个类型显示实例化:

template
double Add<double>(const double& left, const double& right);

运行:

1
1

但是这样太麻烦了,干脆不要声明定义分离了,把Stack.cpp删掉,定义全部放到Stack.h里面:


http://www.ppmy.cn/devtools/99513.html

相关文章

React+Vis.js(07):vis.js设置关系网络图禁止缩放和设置关系的指向和名称

文章目录 设置关系图禁止缩放设置关系图的关系指向和关系名称设置关系图的关系指向:方式一设置关系图的关系指向:方式二设置关系显示的标签设置关系图禁止缩放 在 vis.js 中,你可以通过设置 interaction 配置项中的 zoomView 属性为 false 来禁止缩放功能。这样,用户将无法…

在Excel中“直接引用”字符串地址

indirect是Excel唯一可以拥有直接解析字符串引用地址参数能力的函数&#xff0c;是绝无仅有的宝贝疙瘩。 (笔记模板由python脚本于2024年08月21日 12:45:49创建&#xff0c;本篇笔记适合喜欢用Excel处理数据的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;ht…

大数据-92 Spark 集群 SparkRDD 原理 Standalone详解 ShuffleV1V2详解 RDD编程优化

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

Pytorch升级之旅——基础概念

目录 一、人工智能简史 三次浪潮 DL,ML,AI三者之间的关系 二、模型评价指标 混淆矩阵 Overall Accuracy ​编辑 Average accuracy Kappa系数 Recall Precision F1 PR曲线 置信度 IOU AP mAP 三、常用包Numpy、pandas、matplotlib Numpy pandas matplotlib…

校友林小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;树木管理管理&#xff0c;所属科管理&#xff0c;树木领取管理&#xff0c;树跟踪状态管理&#xff0c;用户信息统计管理&#xff0c;树木捐款管理&#xff0c;留言板管理 微信端…

springboot admin监控

服务端搭建 maven的依赖&#xff0c;包括服务端和客户端&#xff0c;以及注册到nacos上面 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XML…

大话C语言:第46篇 C语言项目工程化之Makefile详解

1 Makefile概述 Makefile是一种用于自动化构建和管理程序的工具&#xff0c;以文本文件的形式存在。它主要记录了程序的编译规则、依赖关系和操作指令&#xff0c;使得在开发过程中能够轻松地进行代码的编译、链接和部署。 Makefile文件中的命令有一定规范&#xff0c;一旦该文…

C语言函数介绍(上)

函数概念库函数标准库和头文件库函数的使用方法头文件包含库函数文档的一般格式 自定义函数函数的语法形式函数例子 形参和实参实参形参实参和形参的关系 return 语句数组做函数参数 函数概念 数学中我们其实就见过函数的概念&#xff0c;比如&#xff1a;一次函数 ykxb &…