Компиляция C ++ файла .o без файла .cc - PullRequest
4 голосов
/ 30 октября 2011

У меня есть программа, где мне дали скомпилированный файл .o, но у меня нет исходного файла .cc, а также у меня есть только наполовину готовый заголовочный файл.Заголовочный файл имеет все сигнатуры методов, но в нем отсутствуют объявления частных переменных.Я пытаюсь заставить этот файл .o работать с проектом, но получаю ошибку сегментации в конструкторе класса, определенного в файле .o.Программа компилируется.Как мне заставить это работать?Программа является домашним заданием, и учитель не хочет, чтобы мы видели файл .cc.Также мой учитель знает о проблеме.Я просто пытаюсь понять это самостоятельно (и, надеюсь, с помощью вас, ребята :)).Я думал, что делал это раньше с другим учителем, но у меня не было проблем.Для компиляции программы используется make-файл.

1 Ответ

4 голосов
/ 30 октября 2011

Если вы используете программу на C ++, а файл заголовка содержит определения классов, определения классов должны точно соответствовать тем, которые использовались для первоначальной сборки файла .Это правило One Definition .Если ваш профессор удалил объявления частных переменных из определений классов, вы, скорее всего, столкнетесь со сбоями;это потому, что ваши разные файлы .o не согласятся с размером объектов, определенных этими классами.

Если ваш профессор хочет скрыть реализацию класса, ему следует использовать шаблон p / impl.Если вы хотите использовать файл заголовка, вы должны полностью удалить искаженные определения классов и не пытаться их использовать (вы можете использовать прямое определение, как в class Foo;, чтобы удовлетворить любые функции, которые принимают / возвращают класс в качестве параметра указателя,однако).

...