C++常见异常汇总(二): undefined reference to

embedded/2024/10/22 11:43:26/

文章目录

    • 1、undefined reference to A
    • 2、undefined reference to `vtable
      • 2.1 模版函数定义方案1: 定义与实现均一起定义在头文件中
      • 2.2 模版函数定义方案2: 定义的同一个文件中,显示声明具体类型
    • 3、multiple definition of

1、undefined reference to A

  • 检查所有main相关的定义,是否均已定义 A
  • 检查 CMakeList.txt 中,是否包含了所有的 .cpp

2、undefined reference to `vtable

  • 缺少构造、析构函数:请检查是否定义了构造、析构函数(尤其在 .cpp 文件中)
  • 子类中未定义基类 virual func =0 ; 的函数实现
  • CMakeList中,未添加对应的 .cpp 文件
  • 模版函数的定义与实现,未同时定义在头文件中

注意:模版函数,尽量定义与实现一起定义在 头文件中,否则在外部调用时,会报 undefined 的错误。除非在 头文件中,再额外增加一个 显示类型调用此模版函数的 函数。

2.1 模版函数定义方案1: 定义与实现均一起定义在头文件中

Test.h


class A
{public:template<typename ValueType>bool PrintContent(const ValueType &value){std::cout << "the value :" << value << std::endl;return true;}};

main.cpp


#include “Test.h”void main()
{A a;a.PrintContent<std::uint64_t>(12345);a.PrintContent<std::uint64_t>("Hello Test");}

2.2 模版函数定义方案2: 定义的同一个文件中,显示声明具体类型

Test.h


class A
{public:template<typename ValueType>bool PrintContent(const ValueType &value);};	template<>
bool A::PrintContent(const std::uint64_t &value);template<>
bool A::PrintContent(const std::string &value);

Test.cpp


template<typename ValueType>
bool A::PrintContent(const ValueType &value)
{std::cout << "the value :" << value << std::endl;return true;
}

main.cpp


#include “Test.h”void main()
{A a;a.PrintContent<std::uint64_t>(12345);a.PrintContent<std::uint64_t>("Hello Test");}

3、multiple definition of

通常,.h 文件中,仅进行函数的定义(尤其是纯C函数),不定义函数的实现,除非:	
  • 定义模版函数

  • 定义类成员函数

如果是在需要在.h 文件中定义函数的实现: 可通过增加 inline 修饰的方式

Test.h

template<typename ValueType>inline bool PrintContent(const ValueType &value){std::cout << "the value :" << value << std::endl;return true;}

main.cpp


#include “Test.h”void main()
{PrintContent<std::uint64_t>(12345);PrintContent<std::uint64_t>("Hello Test");}

http://www.ppmy.cn/embedded/108365.html

相关文章

Docker配置Redis持久化

场景 使用Docker拉取的Redis&#xff0c;从docker中启动redis容器&#xff0c;默认是没有配置文件的 持久化 RDB&#xff1a;按照一定的时间间隔定时以快照的形式保存&#xff0c;也可主动触发AOF&#xff1a;以记录日志的方式进行保存Redis持久化方式&#xff0c;目前有RDB…

云手机怎样简化海外社媒平台运营

随着越来越多的卖家希望拓展海外市场&#xff0c;运营TikTok、Facebook等社交媒体平台已经成为吸引流量和促进销售的重要手段。然而&#xff0c;在管理海外社媒账号的过程中&#xff0c;许多人会面临网络连接的问题。这时&#xff0c;使用一款高效便捷的云手机工具就显得尤为便…

CocosCreator中使用protobuf

(前提) 工欲善其事,必先利其器. 要想在CocosCreator中使用protobuf,我们首先要安装NodeJs.安装教程可参考Node.js安装及环境配置详细教程_nodejs安装及环境配置-CSDN博客,已经很详细了.NodeJs自带npm, 我们要用npm下载protobufjs.可能你会问npm是什么? npm是NodeJs自带的包管理…

机器学习(西瓜书)第 5 章 神经网络

5.1 神经网络模型 什么是神经网络&#xff1f; “简单单元”&#xff1a;神经元模型 神经网络中最基本的成分是神经元(neuron)模型&#xff0c;即上述定义中的“简单单元”.在生物神经网络中&#xff0c;每个神经元与其他神经元相连&#xff0c;当它“兴奋”时,就会向相连的神…

docker-compose安装mysql8集群

我这里一主两从mysql数据库集群,mysql镜像版本是8.0.39 如下 如下&#xff1a; [rootVM-20-8-centos mysqlData]# docker-compose ps NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS mysql-master …

标准库标头 <filesystem> (C++17)学习

此头文件是文件系统支持库的一部分。本篇介绍filesystem命名空间的一些函数。 函数 在命名空间 std::filesystem 定义 absolute (C17) 组成一个绝对路径 (函数) canonicalweakly_canonical (C17) 组成一个规范路径 (函数) relativeproximate (C17) 组成一个相对路径 (函数) c…

Vue 中的 Vuex:全面解析与使用教程

什么是 Vuex&#xff1f; Vuex 是 Vue.js 官方提供的状态管理模式&#xff0c;专为 Vue.js 应用设计。它通过集中式存储管理应用中所有的组件状态&#xff0c;允许组件之间更方便地共享数据&#xff0c;并提供了一套规则来确保状态以可预测的方式发生变化。Vuex 对大型应用尤其…

uniapp小程序下载缓存服务器上的图片

1. 使用uni.downloadFile,但是注意下载图片的地址里的域名&#xff0c;需要在微信公众平台里面的downloadFile合法域名进行配置。 export default function downloadAndCacheImage(imageUrl, name) {return new Promise((resolve, reject) > {console.log("imageUrl&q…