Hello! Есть код: //////////// a.hpp ////////////////// #ifndef __a__ #define __a__ class C { public: void foo(); }; void C::foo() { } #endif //////////// test.cpp ////////////////// #include "a.hpp" void bar() { C c; c.foo(); } //////////// main.cpp ////////////////// #include "a.hpp" int main() { C c; c.foo(); return 0; } //////////// Makefile ////////////////// all: test.o g++ main.cpp test.o test.o: g++ -c test.cpp clean: rm test.o a.out //////////////////////////////////////// При линковке получаю ошибки: g++ -c test.cpp g++ main.cpp test.o test.o: In function `C::foo()': test.cpp:(.text+0x0): multiple definition of `C::foo()' /tmp/ccMAE1jz.o:main.cpp:(.text+0x0): first defined here collect2: ld returned 1 exit status make: *** [all] Ошибка 1 Почему получается множественное определение? В чём принципиальное отличие от случая: //////////// a.hpp ////////////////// #ifndef __a__ #define __a__ class C { public: void foo() { } }; #endif //////////////////////////////////////// при котором всё линкуется нормально? Спасибо!
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от dilmah
Ответ на:
комментарий
от dilmah
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от Eshkin_kot
Ответ на:
комментарий
от Eshkin_kot
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум GCC, #define, #ifndef. Непонятное поведение (2008)
- Форум C++ expected class-name before ‘{’ token (2008)
- Форум не собирается QT (2006)
- Форум Не велосипед ли я придумал часом? (2017)
- Форум QT & MAKE (2004)
- Форум С++, вопрос о включениях (2009)
- Форум swig(c++ -> python) ошибка линковки (2016)
- Форум Препроцессор c/c++. Подстановка/макрогенерация. (2017)
- Форум pthread C++ (2004)
- Форум И в последний раз о передаче виджета :( (2005)