Почему мой код приводит к "не может создать экземпляр абстрактного класса"? - PullRequest
2 голосов
/ 11 января 2010

Это строка, в которой происходит ошибка:

this->_tbfCmdHandler.reset(new Bar()); 

фасад_импл.cpp (202): ошибка C2259: 'FOO :: Bar': не могу создание абстрактного класса
из-за следующих членов:
'void Subscriber :: update (T)': is аннотация с
T = символ &

observer.h (66) : см декларацию 'Подписчик :: обновление'
с
T = символ & 'void Subscriber :: update (T)': is аннотация с
T = const char &

observer.h (66) : см декларацию 'Подписчик :: обновление'
с
T = const char &]

Это декларация для Фасада :: Реализация

namespace FOO
{
class Facade::Implementation 
                :public Subscriber<const char& >                     
{

facade.cpp

FOO::Facade::Facade () : impl (new Implementation)
{

    Singleton<SPM::Facade>::instance ();
}


The update functions:
    void update( const char *aMsg)   
    {
        printf("foo");
    }; 

Надеюсь, это поможет выяснить, где я могу найти ошибку.

Ответы [ 6 ]

3 голосов
/ 11 января 2010

Вы уже написали свой ответ. Класс абстрактный, что означает, что он имеет чисто виртуальные методы. Итак, сначала вы должны реализовать эти методы.

2 голосов
/ 11 января 2010

Вы наследуете от абстрактного класса, поэтому вам нужно реализовать функцию void update (const char &) внутри класса Facade :: Implement.

Вы определили функцию обновления, но она никак не связана с подписчиком. Вы должны поместить это в вашу реализацию.

2 голосов
/ 11 января 2010

Попробуйте прочитать это C ++ FAQ

2 голосов
/ 11 января 2010

Узнайте о полиморфизме и что такое абстрактный класс.

Абстрактное означает, что оно еще не полностью определено, и, следовательно, вы не можете описать это, потому что у вас не все части разобраны.

Это все равно что пытаться завести машину без двигателя.

1 голос
/ 11 января 2010

Вот что решает проблема:

Я удалил обновление void (const char & aMsg) и увидел, что было еще одно «void update (char * aMsg)»

Почемуэта функция не была сообщена компилятором, это чудо ... удаление неконстантной и Pointer (вместо Reference) функции решает проблему окончательно.

0 голосов
/ 11 января 2010

Ошибка говорит void Subscriber<T>::update(T)' : is abstract с T=char &, поэтому вам нужно определить void update(char&), а не просто void update( const RecoveryState &dummy){}.

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