2011-12-26 3 views
0

У меня есть странная ошибка нескольких определений в моем проекте. Я использую команду препроцессора #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, он говорит:

OBJ \ Debug \ main.o: C: \ Users \ ааа \ 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

возможно дубликат [повторные многократных ошибок Определения от включая то же заголовок в несколько КППСЕ] (http://stackoverflow.com/questions/ 223771/repeat-multiple-definition-errors-from-including-same-header-in-multiple-cpps) –

ответ

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++, а также С.

+0

_ Не определять переменные в заголовках! _, Если они не являются константами! +1 –

+0

Являются ли вещи, которые 'const' считаются _variable_? –

+0

const bool myBad_IsNotVariable = true; –

Смежные вопросы