我对 Visual C++ 2005 有一个问题,显然内部类具有相同的名称但在不同的外部类中被混淆了。
该问题发生在两层,其中每一层都有一个侦听器接口作为内部类。B 是 A 的侦听器,并且在其上方的第三层(未显示)中有自己的侦听器。
代码结构如下所示:
啊
class A
{
public:
class Listener
{
public:
Listener();
virtual ~Listener() = 0;
};
// ...
};
溴化氢
class B : public A::Listener
{
class Listener
{
public:
Listener();
virtual ~Listener() = 0;
};
// ...
};
A::Listener() 和 A::~Listener() 在 A.cpp 中定义。
B.cpp
B::Listener::Listener() {}
B::Listener::~Listener() {}
我得到错误
B.cpp(49) : error C2509: '{ctor}' : member function not declared in 'B'
Renesas sh2a 的 C++ 编译器对此没有任何问题,但在其他一些方面它也比 Visual C++ 更自由。
如果我将侦听器接口重命名为具有不同的名称,问题就会消失,但我想避免这种情况(真正的类名而不是 A 或 B 相当长)。
我正在做的 C++ 是否正确,或者 Visual C++ 的投诉是否合理?
有没有办法在不重命名监听器接口的情况下解决这个问题?