Простой вопрос компилятора - PullRequest
0 голосов
/ 26 апреля 2011

У меня проблема с компиляцией проекта, состоящего из нескольких частей.Я думал, что включил правильные операторы #ifndef/#define и включил заголовочные файлы правильно, но, видимо, нет.При попытке компилирования возникла эта ошибка:

[23:18]andrew final_project$:g++ driver2.cpp fish.cpp bay.cpp
ld: duplicate symbol Fish::Fish()  in /var/folders/cc/cc+as-5yHSqg0Jcr+X2+uk+++TI/-Tmp-//ccqNXrPE.o 
and /var/folders/cc/cc+as-5yHSqg0Jcr+X2+uk+++TI/-Tmp-//cc5dOIm5.o for
architecture x86_64
collect2: ld returned 1 exit status

Я могу включить дополнительную информацию, если это необходимо, но мои два заголовочных файла (fish.h и bay.h) добавлены.

#ifndef FOO
#define FOO
...
#endif

мои два файла реализации fish.cpp и bay.cpp.

fish.cpp: #include "fish.h"

bay.cpp: #include "bay.h" #include "fish.h"

Моя драйверная программа driver2.cpp: #include "fish.cpp" #include "bay.cpp"

Я предполагаюпроблема заключается в том, что bay.cpp включает в себя как fish.h, так и bay.h, но когда я не включаю fish.h, «bay» (сетка fish) не определена.Я предполагаю, что проблема не слишком сложна, но я не могу найти решение.

- Заранее спасибо, SegFaults McGee

1 Ответ

4 голосов
/ 26 апреля 2011

Не включайте файлы .cpp в driver2.cpp.Вместо этого включите fish.h и bay.h.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...