У меня есть большое количество защищенных функций-членов, объявленных в файле hpp `базового класса, который используется производным классом. Моя идея состоит в том, чтобы удалить их из файла заголовка, чтобы уменьшить зависимость компиляции. Я также подумал об использовании метода pimpl для защищенного члена.
Я определил класс Impl в файле cpp класса Base и переместил все защищенные функции внутрь класса Impl. Кроме того, я сделал предварительное объявление класса Impl в заголовочном файле класса Base в качестве защищенного члена.
protected:
class Impl;
Impl* impl_;
Но при этом, когда я вызываю защищенную функцию, используя impl_ из производного класса, при компиляции производного класса возникает следующая ошибка:
error: invalid use of incomplete type ‘class Base::Impl’
if (false == impl_->EncodeMMMsgHeader(mm_msg_header_)) {
error: forward declaration of ‘class Base::Impl’
Я думаю, что ошибка возникает из-за того, что нельзя использовать предварительное объявление в любом случае, когда компилятору нужна контекстная информация о классе, и компилятору бесполезно сообщать ему только немного о классе.
Есть ли способ, с помощью которого я мог бы преодолеть вышеуказанную проблему? Если нет, то может ли кто-нибудь предложить мне лучший метод для достижения моей цели.
protectedданные и могут переопределять каждыйvirtual(неfinal) метод. - person Jarod42   schedule 19.07.2018