Visual C++ 2005 で問題が発生しました。明らかに同じ名前の内部クラスが別の外部クラスにあると混乱します。
この問題は、各レイヤーが内部クラスとしてリスナー インターフェイスを持つ 2 つのレイヤーで発生します。B は A のリスナーであり、その上の 3 番目のレイヤーに独自のリスナーがあります (表示されていません)。
コードの構造は次のようになります。
ああ
class A
{
public:
class Listener
{
public:
Listener();
virtual ~Listener() = 0;
};
// ...
};
Bh
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++ による苦情は正当化されますか?
リスナー インターフェイスの名前を変更せずにこの問題を回避する方法はありますか?