C++模板函数-无法解析的外部符号

2023-11-09

在网上,看到有类似的问题,经常是写一个头文件,如test.h,里面这样写:
#ifndef _TEST_H
#define _TEST_H
#include
using namespace std;
//给指针data分配height*width的内存
template
void Allocate(Item*& data, int height, int width);
//输出data中的数据
template
void Print(Item* data, int height, int width);
#endif
然后写cpp文件,命名为test.cpp,
//test.cpp
#include
#include "test.h"
template
void Allocate(Item*& data, int height, int width)
{
data = new Item[height*width];
for(int i=0; i
for(int j=0; j
data[i*width+j] = 0;
}
template
void Print(Item* data, int height, int width)
{
for(int i=0; i
{
for(int j=0; j
std::cout<<data[i*width+j]<<"\t";
std::cout<<endl;
}
}
//主函数
void main()
{
int* data;
Allocate(data, 10, 10);
Print(data, 10, 10);
system("pause");
}
然后出现这样的问题:
maint.obj : error LNK2019: 无法解析的外部符号 "void __cdecl Print(int *,int,int)" (??$Print@H@@YAXPAHHH@Z),该符号在函数 _main 中被引用
maint.obj : error LNK2019: 无法解析的外部符号 "void __cdecl Allocate(int * &,int,int)" (??$Allocate@H@@YAXAAPAHHH@Z),该符号在函数 _main 中被引用
E:\exercise\TempTest1\Debug\TempTest1.exe : fatal error LNK1120: 2 个无法解析的外部命令
解决方案:
1、将实现函数和声明函数合并在一起,即将test.cpp和test.h相合并,即直接写为test.h,
#include
template
void Allocate(Item*& data, int height, int width)
{
data = new Item[height*width];
for(int i=0; i
for(int j=0; j
data[i*width+j] = 0;
}
template
void Print(Item* data, int height, int width)
{
for(int i=0; i
{
for(int j=0; j
std::cout<<data[i*width+j]<<"\t";
std::cout<<endl;
}
}
//主函数
这种方法是很不建议的,因为函数实现的代码,如果特别长的话,影响可读性,而且很多用户调用你的函数时,不关心你的实现,只看函数的输入、输出和作用,都写在一个文件中,增加了很大的不便,建议使用下面的这种方法。
2、在头文件下面增加包含文件“test.template”,即
//test.h
#ifndef _TEST_H
#define _TEST_H
#include
using namespace std;
template
void Allocate(Item*& data, int height, int width);
template
void Print(Item* data, int height, int width);
#include "test.template"
#endif
然后写test.template文件,直接新建,文件名写为“ test.template ”,
然后在这个文件中,实现函数功能,如下:
#include
template
void Allocate(Item*& data, int height, int width)
{
data = new Item[height*width];
for(int i=0; i
for(int j=0; j
data[i*width+j] = 0;
}
template
void Print(Item* data, int height, int width)
{
for(int i=0; i
{
for(int j=0; j
std::cout<<data[i*width+j]<<"\t";
std::cout<<endl;
}
}
再运行主函数,上述问题,就解决了。
欢迎大家交流编程经验,多提宝贵意见,不胜感激!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++模板函数-无法解析的外部符号 的相关文章

  • Arcgis 重装 的 license 问题

    1 卸载不干净 C arcgis安装目录 C ProgramData ESRI C Program Files x86 Common Files 2 注册表 删除有关Arcgis和ESRI的注册表 我是一条分割线 最后 我学会了重装系统
  • if...else; 嵌套if...else

    if else结构 如果怎么样 否则怎么样 if 分支条件 当条件满足时执行 else 当条件不满足时执行 注意 分支条件返回的一定是一个布尔类型 当分支中有且只有一行代码的时候 是可以省略大括号 gt 不推荐 和 之间不能添加任何符号 i
  • Java中 类名+方法名(){}的意思

    public class GetVersion public VersionBean get version code Context context String packagename if getPackageInfo context
  • pandoc 使用方法

    我是使用的 typora mac 版本 在下载 pandoc 完成后使用 pandoc 导出word时出现闪退情况 导致不能成功导出 然后就搜索到 pandoc 的命令行方法 以此记录下来 1 进入https pandoc org 下载 p
  • 代码片段

    以下代码是从Stack Overflow上看到的 对于C virtual的特性挺有参考意义的 于是记录下来 class A public void f std cout lt lt A lt lt std endl class B publ
  • 安全知识试题

    安全知识试题 一 单选题 共计30分 1 1分 在 QQ 群里有一朋友称 他们的学校近期有国外某知名大学教授来上课 上完课程后就可以拿到该大学文凭 但要交 26800 元的学费 正确的做法是 A 判定为诈骗信息 2 1分 在校园里东西丢失该
  • Android OpenGLES 学习笔记

    GL10 纹理问题 贴纹理的时候最好是要 2 n 字节对齐 这里说的是最后绑定到 GL 的那个图片 如果这个图片是由别的图片组合的 则组合的小图片没有这个要求 还有纹理的大小不能超过 GL 最大纹理大小的限制 查询方法 这里是 GL 标准的
  • vue+element表格使用vue-json-viewer实现查看JSON数据效果

    效果图 功能 在element弹窗中根据表格行查看当前行的JSON数据 高亮 可折叠 可复制 这里需要先安装vue json viewer插件 官网地址 https www npmjs com package vue json viewer
  • 神经网络编程基础

    目录 1 二分类 Binary Classification 2 逻辑回归 Logistic Regression 3 逻辑回归的代价函数 Logistic Regression Cost Function 4 梯度下降法 Gradient
  • nodejs调整版本问题

    因为接触到的项目渐渐增多 前端项目所需的nodejs版本也出现了分歧 之前一直用的14 16版本需要调换成八点几的版本 因为不会调整 所以多走了很多弯路 记录下来 以备不时之需 根据网络上所说可以使用nvm进行调整 所以在卸载nodejs之
  • C#进行MapX二次开发之MapX基础知识

    C 进行MapX二次开发之MapX基础知识 MapX的主要技术特点 1 以表 Table 的形式组织信息 每一个表都是一组MapInfo文件 这些文件组成了地图文件和数据库文件 为使用MapInfo 就需要有组成表的用户数据和地图文件 这些
  • 从LXMERT到VLMO:多模态预训练模型的演变史

    作者 吉雅太 单位 清华大学 研究方向 多模态研究 自从 2018 年 BERT 在 NLP 领域声名鹊起 通过预训练在 n 多 NLP 任务中刷榜 成功发掘出了 transformer 的潜力 众多研究者就看到了多模态发展的新的机会 使用
  • C/C++ 打印三角形

    打印三角形是C语言的经典例题 首先我们先看看效果图 一 直角三角形 ok 现在从最简单的打印直角三角形开始 通过以上效果图你会发现规律 行数 的个数 1 1 2 2 3 3 4 4 5 5 n n 根据以上规律写出以下代码 include
  • 查缺补漏:集和与非平凡属性

    查缺补漏 集和与非平凡属性 前面的习题和知识点补充 Conjunctive normal form CNF 是布尔逻辑的一种方法 它将公式表示为带有AND或or的子句的连词 由连词or AND连接的每个子句必须是文字或包含析取or运算符 子
  • selenium-XPATH定位

    XPATH定位 相对路径 相对定位是两个杠表示 相对路径易维护 例 div 1 div 2 绝对路径 绝对定位用一个杠 绝对路径一个层级变化所有空间都有变化 例 html body div 1 section section main di
  • 简易RPC框架-SPI

    案例 我们所熟悉的jbdc是一种用于执行SQL语句的Java API 可以为多种关系数据库提供统一访问 提供了一种基准 据此可以构建更高级的工具和接口 如上图所示 任意的一个数据库厂商只要去实现jdbc的接口 就可以轻松的对接jbdc从而为
  • csharp: read excel using Aspose.Cells

  • grunt html引入,javascript – 使用grunt自动将本地* .js和* .css文件引用到index.html中

    我打算开发一个angularJS客户端 我将使用角度组件 这将导致多个 js css文件 为了避免手动引用每个新添加的js css文件 我打算使用grunt include source任务 问题是 在配置Gruntfile js后 gru
  • postgresql:自动生成uuid列

    postgresql 有一个uuid数据类型 选择这个类型就可以在每条记录新增时自动生成uuid值 但pgsql默认没有安装uuid自动生成功能 需要手动执行命令启用该功能 方法如下 1 执行sql语句 create extension u

随机推荐

  • 【开发工具】SVN断网续传、续下解决办法

    支持原创 欢迎关注原文地址 http www china10s com blog p 406 当你处在弱网环境下 经常断网 断线 这时候下载SVN代码是个难题 网上搜到的答案也是众说纷纭 那么我就说一下我的解决办法吧 在你确认断网导致SVN
  • 华为OD机试真题- 分割数组的最大差值-2023年OD统一考试(B卷)

    题目描述 给定一个由若干整数组成的数组nums 可以在数组内的任意位置进行分割 将该数组分割成两个非空子数组 即左数组和右数组 分别对子数组求和得到两个值 计算这两个值的差值 请输出所有分割方案中 差值最大的值 输入描述 第一行输入数组中元
  • PAD2Reg和Reg2PAD的时序分析

    PAD2Reg 1 Input delay约束从SOC PAD输入到第一级FF的data path 2 Input delay约束中的 clock指的是launch clock 它一般存在于Device中 对SOC来说是个虚拟时钟 如果发射
  • 从生产到测试,多张表但有相同的业务主键-存储过程的使用

    PL SQL Developer Test script 3 0 32 Created on 2019 4 12 by ADMINISTRATOR declare Local variables here sqh0 varchar2 20
  • CMS V5.7 SP2漏洞复现(CVE-2018-20129)

    0x00 前置 1 CVE中对该漏洞的描述 在 DedeCMS V5 7 SP2 中发现了一个问题 uploads include dialog select images post php 允许远程攻击者通过双扩展名和修改的 php 子字
  • Nodejs学习之Path模块

    一 介绍 Node js path模块提供了一些用于处理文件路径的方法 引入Path模块 var path require path 二 函数介绍 2 1 path normalize 格式化路径 console log normaliza
  • 常见数据结构

    一 数据结构 1 线性 数组 按顺序存储在内存中 每一个节点都有下标 查询快 数组一般用来存储相同类型的数据 可通过数组名和下标进行数据的访问和更新 数组中元素的存储是按照先后顺序进行的 同时在内存中也是按照这个顺序进行连续存放 数组相邻元
  • rtabmap安装与使用

    参考 ubuntu18 04安装Rtabmap 具体详细步骤 教你手把手运行基于ZED的rtab map ZED入门 利用RTAB MAP做SLAM ubuntu16 04 ROS Kinetic rtabmap 源码 非ros版本 安装运
  • freeswitch四、局域网支持

    在局域网内进行的测试 需要进行ACL的配置 conf autoload configs acl conf xml 中 加入下面配置
  • 搭建属于自己的云测试平台

    最近老大给了一个资料让研究 需要搭建一个平台 把公司所有的测试机集中在一起管理 谁需要用的时候 直接在web页面使用 省去了到处找别人借手机等问题 下面先介绍以下这个平台 STF Smartphone Test Farm 是一个Web应用程
  • python爬虫案例(二):大学排名

    小菜鸟从一个个案例来练习爬虫 心路是曲折的 555 在爬虫案例 一 中 是用urllib进行的 本案例中应用的是requests库 它会比urllib更加方便 requests是python实现的最简单易用的HTTP库 建议爬虫使用requ
  • JavaScript学习(四)认识DOM

    文章目录 DOM简介 通过ID获取元素 innerHTML 属性 改变 HTML 样式 display属性 DOM简介 DOM Document Object Model 文档对象模型 定义了访问和处理html文档的标准方法 DOM 将HT
  • 《信号与系统》示例1.单位阶跃信号的matlab实现

    1 已知单位阶跃函数 请用matlab实现单位阶跃信号 step1 打开matlab2014a 版本可以自选 step2 输入相应代码 t 1 0 01 5 ft t gt 0 plot t ft grid on plot函数是绘制二维图形
  • Vue项目运行报错:Module build failed (from ./node_modules/babel-loader/lib/index.js)

    报错分析 今天在npm run serve运行Vue项目时 突然报出了一个依赖构建错误 Module build failed from node modules babel loader lib index js 报错原因是babel的版
  • linux三剑客sed之模式空间与保持空间

    pattern space 模式空间 and hold space 保持空间 H h G g x 模式空间 sed处理文本内容行的一个临时缓冲区 模式空间中的内容会主动打印到标准输出 并自动清空模式空间 保持空间 sed处理文本内容行的另一
  • 【Hexo themes】【闪烁之狐 Matery】【简】

    文章目录 1 Down 2 修改Hexo配置文件 3 预览 4 部署更新 Summary Reference 个性化 PS 上午在 Hexo themes找了一些主题 有的太简单 可以配置的功能少 有些太复杂 以up现有能力要调一会才能开通
  • 从JAVA转.NET

    走路 难免要过河 生活 难免要磕碰 最近由于公司业务调整 把我所在的部门 整体搬迁到另外一个部门 业务自然是要从头开始了 这 我也就忍了 反正业务嘛 对大家都是公平的 而且搞软件开发哪能同一个业务做一辈子啊 除了盖茨啊 郁闷的是 技术也要换
  • 前端基础4——jQuery

    文章目录 一 基本了解 1 1 导入jQuery库 1 2 基本语法 1 3 选择器 二 操作HTML 2 1 隐藏和显示元素 2 2 获取与设置内容 2 3 获取 设置和删除属性 2 4 添加元素 2 5 删除元素 2 6 设置CSS样式
  • 在centos7上安装在线vscode

    最近在二开datahub 而datahub比较适合在linux中部署 就打算使用线上开发工具code server 安装方法比较简单 直接执行脚本进行安装 curl fsSL https code server dev install sh
  • C++模板函数-无法解析的外部符号

    在网上 看到有类似的问题 经常是写一个头文件 如test h 里面这样写 ifndef TEST H define TEST H include using namespace std 给指针data分配height width的内存 te