标题有奇怪的多重定义错误

时间:2011-12-26 08:29:29

标签: c++ multiple-definition-error

我的项目中有一个奇怪的多重定义错误。 我正在使用#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中!

怎么了?

1 个答案:

答案 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.