включая заголовочные файлы в .cpp файлах - PullRequest
2 голосов
/ 08 февраля 2012

У меня есть файл SpreadSheetCell.h и SpreadSheetCell.cpp.
У меня есть другой файл SpreadSheet.cpp, который включает в себя SpreadSheetCell.h. В этом случае он дает мне ошибки, такие как «неопределенная ссылка на SpreadSheetCell: SpreadSheetCell ()» и т. Д.
Но когда я пытаюсь включить SpreadSheetCell.cpp вместо ошибок пропали. Разве не принято включать файлы заголовков, а не файлы cpp? Что я могу делать не так?

Ответы [ 3 ]

3 голосов
/ 08 февраля 2012

Это ошибка компоновки и означает, что вы не включаете исходный файл, который имеет определение для SpreadSheetCell:SpreadSheetCell() при компиляции.

Возможно, вам не хватает SpreadSheetCell.cpp в используемой командной строке, например, что-то вроде:

g++ -o myBinary SpreadSheet.cpp SpreadSheetCell.cpp [...more files?]
1 голос
/ 08 февраля 2012

Никогда не стоит включать исходный код. Всегда включать только заголовочные файлы.

Я не могу заглянуть в ваш файл (ы), однако, я думаю, что SPreadSheetCell.h включает файл (может быть SpreadSheet.h?), Поэтому существует циклическая зависимость.

Лучший способ - составить график включаемых файлов (как в файлах cpp, так и в h). Если где-то есть «круг», вы нашли проблему. В этом случае вы должны удалить одну ссылку, чтобы круг разорвался, или разбить файлы на более мелкие файлы (также, чтобы удалить круг).

(под "кружком" я имею в виду, например, файл A, включающий B, включая C, снова включающий A).

0 голосов
/ 08 февраля 2012

Убедитесь, что ваш SpreadSheetCell.cpp имеет #, включая «SpreadSheetCell.h» , если не отображается ваш код и ваши команды компиляции!

...