История изменений
Исправление annulen, (текущая версия) :
typedef basic_ptree<std::string, std::string> ptree;
Тут проявляется твой большоё пробел в понимании внутреннего устройства плюсов. Если в классе есть какое-то поле, то всем пользователям класса дожен быть известен его размер — чтобы было понятно, сколько места выделять под объект класса на стэке. Если у поля тип T*
или T&
, то размер поля — это размер указателя, и в таких случаях часто можно использовать forward declaration (естественно, для этого ещё нужно, чтобы никакие инлайн-методы не требовали каких-то ещё знаний о T, в том числе автоматические конструкторы и особенно деструкторы).
Edit: а в тех местах, когда можно обойтись без знания размера объекта CJSON
, можно и нужно форвард-декларировать сам class CJSON
вместо инклуда.
А если поле лежит по значению (и его тип не является внутри каким-нибудь тайпдефом на указатель), то тут обычно без вариантов требуется инклудить всё по-полной.
Исходная версия annulen, :
typedef basic_ptree<std::string, std::string> ptree;
Тут проявляется твой большоё пробел в понимании внутреннего устройства плюсов. Если в классе есть какое-то поле, то всем пользователям класса дожен быть известен его размер — чтобы было понятно, сколько места выделять под объект класса на стэке. Если у поля тип T*
или T&
, то размер поля — это размер указателя, и в таких случаях часто можно использовать forward declaration (естественно, для этого ещё нужно, чтобы никакие инлайн-методы не требовали каких-то ещё знаний о T, в том числе автоматические конструкторы и особенно деструкторы).
А если поле лежит по значению (и его тип не является внутри каким-нибудь тайпдефом на указатель), то тут обычно без вариантов требуется инклудить всё по-полной.