Невозможно использовать родительский класс во вложенном классе, даже если вложенный класс определен позже - PullRequest
0 голосов
/ 22 марта 2012

У меня сейчас есть такая установка:

template<typename T> class Parent {
    struct Nested;
    std::unique_ptr<Nested> ptr;
public:
    // stuff
    ~Parent();
};
template<typename T> struct Parent<T>::Nested {
    Parent<T> p;
    // stuff
};

Visual Studio выдает ошибку, что структура Nested использует неполный тип Parent - даже если определение после класс Parent завершен.

Как я могу решить эту проблему?

Редактировать: Если это не было очевидно, я использовал определение деструктора с задержкой до тех пор, пока после не будет определен класс Nested, чтобы разрешить unique_ptr для неполного типа. Кроме того, это совершенно определенно не связано с этим, потому что ошибка не в том, что Nested неполный, а в том, что Nested содержит член типа Parent, который является неполным. Кроме того, если я явно удалю средство удаления с помощью std::function<void(Nodes*)>, проблема не будет решена.

1 Ответ

1 голос
/ 22 марта 2012

Проблема больше с unique_ptr, а не с классом. Измените его на shared_ptr или обычный необработанный указатель, и код работает нормально.

Пожалуйста, найдите ссылку ниже от Stackoverflow.

Требует ли std :: unique_ptr знать полное определение T?

UPDATE
Согласно приведенной выше ссылке, код работает с unique_ptr, если Parent не был задан шаблон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...