你发布的代码产生了与你在我的机器上描述的相同的编译器错误。我自己不太确定问题到底是什么,但我有一种感觉,从纯虚拟类继承并在后代中声明纯虚拟类可能不是一个好主意。
class OuterA
{
public:
class Listener
{
public:
Listener() {}
virtual ~Listener() = 0 {}
};
OuterA() {}
~OuterA(){}
};
class OuterB : public OuterA::Listener
{
public:
class Listener
{
public:
Listener() {}
~Listener() {}
};
OuterB() {}
~OuterB() {}
};
如果使用typedefs隐藏侦听器的名称,至少我的演示代码编译和链接是这样的:
//收割台
class OuterA
{
public:
class Listener
{
public:
Listener();
virtual ~Listener() = 0;
};
OuterA();
~OuterA();
};
class OuterB : public OuterA::Listener
{
public:
class Listener
{
public:
Listener();
virtual ~Listener() = 0;
};
OuterB();
~OuterB();
};
OuterA::OuterA(){}
OuterA::~OuterA(){}
OuterA::Listener::Listener(){}
OuterA::Listener::~Listener(){}
typedef OuterB::Listener BListener;
OuterB::OuterB() {}
OuterB::~OuterB(){}
BListener::Listener(){}
BListener::~Listener(){}