这是发生错误的行:
this->_tbfCmdHandler.reset(new Bar());
facade_impl.cpp(202):错误C2259: 'FOO :: Bar':不能 实例化抽象类
由于以下成员:
'void Subscriber :: update(T)':是 摘要与
T = char&observer.h(66) :见声明 “用户::更新”
与
T = char& 'void Subscriber :: update(T)':是 摘要与
T = const char&observer.h(66) :见声明 “用户::更新”
与
T = const char& ]
这是Facade :: Implementation
的声明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");
};
我希望这有助于弄清楚我在哪里可以找到错误。
答案 0 :(得分:3)
您已经写完了答案。该类是抽象的,这意味着它具有纯虚方法。所以,首先必须实现这些方法。
答案 1 :(得分:2)
答案 2 :(得分:2)
尝试阅读此C ++ FAQ
答案 3 :(得分:2)
您继承自抽象类,因此需要在类Facade :: Implementation中实现void update(const char&amp;)函数。
您确实定义了更新功能,但它与订阅者无任何关系。你必须把它放在你的实现中。
答案 4 :(得分:1)
问题解决了这个问题:
我删除了void update(const char&amp; aMsg),看到还有另一个 “void update(char * aMsg)”
为什么编译器没有报告这个函数是一个奇迹...... 删除非const和指针(而不是引用)函数最终修复了问题。
答案 5 :(得分:0)
错误上标有void Subscriber<T>::update(T)' : is abstract
T=char &
,因此您需要定义void update(char&)
,而不只是void update( const RecoveryState &dummy){}
。