我的项目中有一个奇怪的多重定义错误。
我正在使用#ifndef
预处理程序命令来避免多次包含同一文件。我清除了所有其他代码。这是我的简化文件:
1 - main.cpp
#include "IP.hpp"
int main()
{
return 0;
}
2 - IP.cpp
#include "IP.hpp"
//some codes!
3 - IP.hpp
#ifndef IP_HPP_INCLUDED
#define IP_HPP_INCLUDED
unsigned char LUTColor[2];
#endif // IP_HPP_INCLUDED
使用codeblocks&在win7中gnu gcc,它说:
obj \ Debug \ main.o:C:\ Users \ aaa \ Documents \ prg \ ct3 \ main.cpp | 4 |首先在这里定义|
|| ===构建完成:1个错误,0个警告=== |
在删除所有其他代码之前,错误是:
|| === edgetest,Debug === |
obj \ Debug \ IP.o ||在函数`Z9getHSVLUTPA256_A256_12colorSpace3b'中:|
c:\ program files \ codeblocks \ mingw \ bin .. \ lib \ gcc \ mingw32 \ 4.4.1 \ include \ c ++ \ exception | 62 |`LUTColor'的多重定义|
obj \ Debug \ main.o:C:\ Users \ aaa \ Documents \ prg \ edgetest \ main.cpp | 31 |首先在此定义|
|| ===构建完成:2个错误,0个警告=== |
'LUTColor'在IP.hpp中!
怎么了?
答案 0 :(得分:3)
问题出在标题中 - 您需要:
#ifndef IP_HPP_INCLUDED
#define IP_HPP_INCLUDED
extern unsigned char LUTColor[2]; // Declare the variable
#endif // IP_HPP_INCLUDED
您还需要指定一个源文件来定义LUTColor
(IP.cpp是显而易见的地方)。
另请参阅:What are extern variables in C,其中大部分适用于C ++和C.