Странная множественная ошибка определений с заголовками - PullRequest
0 голосов
/ 26 декабря 2011

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

Используя кодовые блоки & gnu gcc в win7, он говорит:

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 Ответ

3 голосов
/ 26 декабря 2011

Проблема в шапке - нужно:

#ifndef IP_HPP_INCLUDED
#define IP_HPP_INCLUDED

extern unsigned char LUTColor[2]; // Declare the variable

#endif // IP_HPP_INCLUDED
  • Не определяйте переменные в заголовках!

Вам также необходимо назначить исходный файл, чтобы определить LUTColor (IP.cpp - очевидное место).

См. Также: Что такое внешние переменные в C , большинство из которых относится как к C ++, так и к C.

...