Компилятор должен знать точную структуру памяти объекта, просматривая заголовочный файл, в котором он определен.
Ваш код говорит, что класс MyQueue
имеет член типа InnerQueue
, который будет частью структуры памяти объектов MyQueue
. Поэтому, чтобы вывести структуру памяти MyQueue
, необходимо знать структуру памяти InnerQueue
. А это не так, потому что вы говорите: «Ну, это определено в другом месте».
То, что вы пытаетесь сделать, тесно связано с методом PIMPL idiom"/" firewall компилятора ".
Чтобы решить эту проблему, вы должны либо включить HiddenQueue.h в свой заголовок, либо объявить _innerqueue в качестве указателя:
class myQueue {
public:
myQueue();
private:
inner::HiddenQueue* _pinnerQueue;
};
Использование указателя возможно, потому что указатель имеет известный объем памяти (зависит от вашей целевой архитектуры), поэтому компилятору не нужно видеть полное объявление HiddenQueue
.