Я думаю, что ключ здесь "когда я использую его унаследованные классы в другом месте" .Исправьте меня (и ваш вопрос, пожалуйста), если я ошибаюсь, но это говорит о том, что вы получаете ошибку компиляции при компиляции исходного файла, отличного от neuron.cpp
.
Это имеет смысл, учитывая, какой компилятордолжен работать с.Вы могли заметить, что изменения в одном исходном файле не требуют повторной компиляции других исходных файлов.Таким образом, добавление чего-либо - например, перегрузки serialize()
- в neuron.cpp
не меняет компиляцию других модулей перевода.(Это может изменить то, как все соединено вместе в конце, но мы еще не там.) Если другой модуль перевода попытается сериализовать Neuron
, материал в neuron.cpp
не имеет значения.Компилятор не знает о соответствующей перегрузке serialize()
, поэтому сериализация Neuron
в другом исходном файле приводит к навязчивой сериализации.То есть компилятор будет искать функцию-член Neuron
с именем serialize()
.
Чтобы ваша перегрузка serialize()
влияла на компиляцию других модулей перевода, она должнабыть объявленным в заголовочном файле.
Поскольку вы не можете поместить Boost в neuron.h
, возможно, вам придется создать новый заголовочный файл, скажем, neuron_boost.h
.Этот файл #include "neuron.h"
затем предоставит объявления, необходимые для сериализации Boost.Исходные файлы, которые сериализуют потомков Neuron
, будут включать neuron_boost.h
, в то время как другие исходные файлы могут продолжать включать исходные neuron.h
.