2012-02-08 1 views
2

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

+2

Или что вы можете делать правильно, это все точки зрения, потому что нет источника Луки. – user505160

+1

То, что вы делаете неправильно, задает вопрос, не давая достаточно подробностей. –

ответ

3

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

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

g++ -o myBinary SpreadSheet.cpp SpreadSheetCell.cpp [...more files?] 
+0

Aww .. Да, я забыл включить SpreadSheetCell.cpp во время компиляции. благодаря –

1

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

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

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

(с 'круг' Я имею в виду, например, файл преобразования A, включая B, включая C A снова в том числе.)

0

Убедитесь, что ваш SpreadSheetCell.cpp имеет #include "SpreadSheetCell.h", если не показать код и ваши команды компиляции!