LINUX.ORG.RU

История изменений

Исправление 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, в том числе автоматические конструкторы и особенно деструкторы).

А если поле лежит по значению (и его тип не является внутри каким-нибудь тайпдефом на указатель), то тут обычно без вариантов требуется инклудить всё по-полной.