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

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的一个定义,导致链接时冲突。

相关文章:

  • Matlab B级路面激励下集中驱动、轮边驱动和主动减振车辆
  • css3伸缩盒模型第三章(伸缩相关)
  • JWT深度解析:现代Web身份验证的通行证-优雅草卓伊凡
  • 基于FPGA婴儿安全监护系统(蓝牙小程序监测)
  • python小说网站管理系统-小说阅读系统
  • 深入解析asyncio的实现与应用
  • 在模 p 运算中,将负数 x 转换为对应的正数,执行 (x % p + p) % p 操作即可。
  • 大模型调优方法与注意事项
  • 基于springboot+vue的校园部门资料管理系统
  • 【java】oop 结课模拟题版
  • Python 异常处理与文件 IO 操作:构建健壮的数据处理体系(3/10)
  • 【开源】Python打造高效剪贴板历史管理器:实现跨平台生产力工具
  • 数据分析平台选型与最佳实践:如何打造高效、灵活的数据生态?
  • PyTorch 实战:从 0 开始搭建 Transformer
  • 按句子切分文本、保留 token 对齐信息、**适配 tokenizer(如 BERT)**这种需求
  • 数据中台-常用工具组件:DataX、Flink、Dolphin Scheduler、TensorFlow和PyTorch等
  • 计算机视觉与深度学习 | 基于Transformer的低照度图像增强技术
  • 从知识图谱到精准决策:基于MCP的招投标货物比对溯源系统实践
  • 【银河麒麟高级服务器操作系统】服务器外挂存储ioerror分析及处理分享
  • flinksql bug : Max aggregate function does not support type: CHAR
  • 七大交响乐团“神仙斗法”,时代交响在上海奏出时代新声
  • 警惕“全网最低价”等宣传,市监总局和中消协发布直播消费提示
  • 《2025城市青年旅行消费报告》发布,解码青年出行特征
  • 谜语的强制力:弗洛伊德与俄狄浦斯
  • 上海科创“八杰”赋能新兴产业链:硬核科技,形成良好盈利模式
  • 花20万骑自行车?CityRide带火“骑行经济”