当前位置: 首页 > ai >正文

C++错误: multiple definition of `Q‘

今天在使用CMake进行编译时,出现了:

/usr/bin/ld: CMakeFiles/HyperVisualize.dir/tasks.cpp.o:/home/kimi/FalseColor/Queue.h:109: multiple definition of `Q'; CMakeFiles/HyperVisualize.dir/main.cpp.o:/home/kimi/FalseColor/Queue.h:109: first defined here
/usr/bin/ld: CMakeFiles/HyperVisualize.dir/tasks.cpp.o:(.bss+0x122): multiple definition of `__odr_asan.Q'; CMakeFiles/HyperVisualize.dir/main.cpp.o:(.bss+0x268): first defined here
collect2: error: ld returned 1 exit status

我自定义了一个存储图像字节数据的队列类Queue,放在头文件Queue.h中,并在Queue.h中定义了队列类对象数组:

Queue Q[3];

然而main.cpp和tasks.cpp都包含了头文件Queue.h

按照Kimi的说法:

在编译过程中出现的链接错误提示multiple definition of 'Q’是由于违反了C++的ODR(One Definition Rule)原则,即全局变量或对象在多个编译单元中被重复定义。

由于在头文件中定义了数组Q。当多个源文件(如main.cpp和tasks.cpp)包含该头文件时,每个源文件都会生成Q的一个定义,导致链接时冲突。

http://www.xdnf.cn/news/4801.html

相关文章:

  • 超详细讲解注意力机制、自注意力机制、多头注意力机制、通道注意力机制、空间注意力机制
  • CCF编程能力等级认证 一级 第一次课
  • 【PhysUnits】3 量纲接口实现解析(dimensional.rs)
  • 如何处理oracle 12c DG归档日志缺失(gap)导致备库同步中断问题
  • 创建型模式:抽象工厂(Abstract Factory)模式
  • Matlab 数控车床进给系统的建模与仿真
  • ubuntu24.04安装cuda
  • 微程序控制器的详细工作过程
  • 基于精准光域控制的光触发RFID标签
  • 【万字长文】深入浅出 LlamaIndex 和 LangChain:从RAG到智能体,轻松驾驭LLM应用开发
  • python调用国税乐企直连接口开数电票之API调用工具类
  • AI领域的MCP(Model-Centric Paradigm)
  • 无线远传压力传感装置:城市管网的 “压力小卫士”
  • 【盟通杂谈】为什么现代工业需要工业协议?
  • CDGP|数据全生命周期的“收数、治数、用数、保数”体系详解
  • 操作系统 : 线程概念与控制
  • Nacos源码—Nacos集群高可用分析(三)
  • 无需标记点,精准面部捕捉!无线面捕头盔赋予自由表演空间
  • 力扣94. 二叉树的中序遍历
  • 简单网络交换、路由
  • Java 异常处理
  • 【DBMS学习系列】一、DBMS(数据库管理系统)的存储模型
  • 学成在线之课程管理
  • 100个常用的DeepSeek指令
  • Vue事件总线(EventBus)使用指南:详细解析与实战应用 父子组件传值
  • Chain of Thought (思维链) 技术详解
  • 按摩椅上的气囊系统 是现代按摩椅中非常关键的组成部分,它与机芯系统相辅相成,为用户提供全方位、更接近真人按摩的体验
  • WSL(Windows Subsystem for Linux)入门
  • 绿色计算:可持续发展的计算技术
  • 记录一次华为魔改 fusionlnsight和ai问答的狗血故事