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