У меня есть файл SpreadSheetCell.h и SpreadSheetCell.cpp.
У меня есть еще один файл SpreadSheet.cpp, который включает в себя SpreadSheetCell.h. В этом случае он дает мне такие ошибки, как «неопределенная ссылка на SpreadSheetCell: SpreadSheetCell()» и т. Д.
Но когда я пытаюсь включить SpreadSheetCell.cpp, вместо этого ошибки прошло. Не является ли распространением включать файлы заголовков, а не файлы cpp? Что я могу делать неправильно?включая заголовочные файлы в .cpp-файлах
ответ
Это ошибка связи и означает, что вы не включаете исходный файл, который имеет определение для SpreadSheetCell:SpreadSheetCell()
при компиляции.
Возможно, в командной строке вы используете SpreadSheetCell.cpp
, например. что-то вроде:
g++ -o myBinary SpreadSheet.cpp SpreadSheetCell.cpp [...more files?]
Aww .. Да, я забыл включить SpreadSheetCell.cpp во время компиляции. благодаря –
Не стоит включать исходный код. Всегда включать только заголовочные файлы.
Я не могу смотреть в ваши файлы, однако, я думаю, что SPreadSheetCell.h содержит файл (SpreadSheet.h, возможно?), Так что существует циклическая зависимость.
Лучший способ - составить график файлов, которые включены (в обоих файлах cpp и h). Если есть «круг», где-то вы нашли проблему. В этом случае вы должны удалить одну ссылку, чтобы круг был сломан или разбился на файлы в меньших файлах (также для удаления круга).
(с 'круг' Я имею в виду, например, файл преобразования A, включая B, включая C A снова в том числе.)
Убедитесь, что ваш SpreadSheetCell.cpp имеет #include "SpreadSheetCell.h", если не показать код и ваши команды компиляции!
Или что вы можете делать правильно, это все точки зрения, потому что нет источника Луки. – user505160
То, что вы делаете неправильно, задает вопрос, не давая достаточно подробностей. –