Неверное применение sizeof к неполному типу (созданные классы)

У меня есть следующие занятия:

State.hpp

    ...

class Engine;

namespace window
{

class State
{ ... } }

WConsole.hpp

    ...

class Engine;

namespace window
{

class Console: public State
{ .. } }

WMesssage.hpp

    ...

class Engine;

namespace window
{

class Message: public State
{ ... } }

И все классы ссылаются на класс Engine:

Engine.hpp

    ...

namespace window
{
class State;
class Console;
class Message;
}

class Engine
{
...
std::vector< std::unique_ptr<window::State> > m_windowObjects;
std::unique_ptr<window::Console> m_consoleWindow;
std::unique_ptr<window::Message> m_messageWindow;
...
}

И в Engine.cpp я включаю заголовки:

    #include "Engine.hpp"#include "WState.hpp"#include "WConsole.hpp"#include "WMessage.hpp"

Если я пытаюсь скомпилировать, я получаю следующие ошибки:

In file included from /usr/include/c++/4.8.2/memory:81:0,
from /usr/local/include/SFGUI/Signal.hpp:6,
from /usr/local/include/SFGUI/Object.hpp:4,
from /usr/local/include/SFGUI/Widget.hpp:4,
from /usr/local/include/SFGUI/Container.hpp:4,
from /usr/local/include/SFGUI/Bin.hpp:4,
from /usr/local/include/SFGUI/SFGUI.hpp:6,
from ./include/Handler.hpp:4,
from main.cpp:1:
/usr/include/c++/4.8.2/bits/unique_ptr.h: In instantiation of 'void std::default_delete<_Tp>::operator()(_Tp*) const [with _Tp = window::Console]':
/usr/include/c++/4.8.2/bits/unique_ptr.h:184:16:   required from 'std::unique_ptr<_Tp, _Dp>::~unique_ptr() [with _Tp = window::Console; _Dp = std::default_delete<window::Console>]'
./include/Engine.hpp:21:7:   required from here
/usr/include/c++/4.8.2/bits/unique_ptr.h:65:22: error: invalid application of 'sizeof' to incomplete type 'window::Console'
static_assert(sizeof(_Tp)>0,
^
/usr/include/c++/4.8.2/bits/unique_ptr.h: In instantiation of 'void std::default_delete<_Tp>::operator()(_Tp*) const [with _Tp = window::Message]':
/usr/include/c++/4.8.2/bits/unique_ptr.h:184:16:   required from 'std::unique_ptr<_Tp, _Dp>::~unique_ptr() [with _Tp = window::Message; _Dp = std::default_delete<window::Message>]'
./include/Engine.hpp:21:7:   required from here
/usr/include/c++/4.8.2/bits/unique_ptr.h:65:22: error: invalid application of 'sizeof' to incomplete type 'window::Message'

Из того, что я вижу, я не получаю ошибку, относящуюся к window :: State, поэтому я имею в виду, что я ввел ее правильно, но почему я получаю ошибку, связанную с window :: Console и window :: Message?
Может повлиять на это окно классов :: Консоль и окно :: Сообщение выводятся из окна :: Состояние?

2

Решение

Аргумент типа для unique_ptr должен быть полным типом для многих случаев использования (подробности см. в комментариях); объявленный форвард класс неполный. У вас должно быть полное определение видимого класса.

2

Другие решения

Я изменил на shared_ptr, но включение заголовков все еще вариант.

Вот ссылка для тех, кто может иметь такую ​​же ошибку Вот

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector