2

这是发生错误的行:

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


facade_impl.cpp(202): 错误 C2259: 'FOO::Bar' :由于以下成员无法实例化抽象类:
'void Subscriber::update(T)' : 是抽象的
T=char &

observer.h(66) : 参见 'Subscriber::update' 的声明
T
=char & 'void Subscriber::update(T)' : 是抽象的
T=const char &

observer.h(66) : 参见 'Subscriber::update' 的声明
T
=const char & ]

这是 Facade::Implementation 的声明

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

外观.cpp

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

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


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

我希望这有助于找出我在哪里可以找到错误。

4

6 回答 6

3

你已经写下了你的答案。该类是抽象的,这意味着它具有纯虚方法。因此,您首先必须实现这些方法。

于 2010-01-11T10:13:07.470 回答
2

阅读有关多态性和抽象类是什么的信息。

抽象意味着它尚未完全定义,因此您无法实例化它,因为您没有弄清楚所有部分。

这就像试图在没有发动机的情况下启动汽车。

于 2010-01-11T10:14:37.883 回答
2

尝试阅读此 C++常见问题解答

于 2010-01-11T10:14:40.600 回答
2

您是从抽象类继承的,因此您需要在类 Facade::Implementation 中实现 void update( const char& ) 函数。

您确实定义了一个更新函数,但它与订阅者没有任何关系。你必须把它放在你的实现中。

于 2010-01-11T16:04:59.243 回答
1

这就是问题要解决的问题:

我删除了 void update( const char &aMsg),发现还有一个 "void update( char *aMsg)"

为什么编译器没有报告这个函数是一个奇迹……删除非常量和指针(而不是引用)函数最终解决了这个问题。

于 2010-01-11T16:07:03.577 回答
0

错误说void Subscriber<T>::update(T)' : is abstractwith T=char &,所以你需要定义void update(char&),而不仅仅是void update( const RecoveryState &dummy){}.

于 2010-01-11T10:20:37.623 回答