コンパイル対象が同じで、非常に同一な2つのプログラムAとBの間で使用したい共有ファイルがあります。名前空間を組み合わせたC++
だから、私はInterfaces.h
を2つの名前空間にそれらを分離し、共有ファイルの共有名前空間を作成しようとしました
namespace ns_s {
class SomeClass;
class IFoo {
virtual void bar(SomeClass*) = 0;
};
}
SomeHeaderinA.h
#include "Interfaces.h"
namespace ns_a {
using namespace ns_s;
class Foo : public IFoo {
virtual void bar(SomeClass* p) override { ... }
};
}
しかし、コンパイラ私のメンバーファンクションバーが何もオーバーライドしていないので、インターフェイスの実装が見えないようになっているので不平を言っています。 それはなぜですか?コンパイラはなぜIFooのクラスが不足していると不平を言っていないのですか?
EDIT: 問題に寄与する重要な部分が欠落しているように見えます。私はインターフェイスメソッドのパラメータであるクラスを事前に宣言しました。今度は、ネームスペース共有の事前宣言と、ネームスペースAの実際の宣言を思いつきました。これらのことはもう同じではありません。
これを修正する良い方法はありますか?インターフェイスの小さなサブセットだけが、それぞれ別のネームアダプタ(AまたはB)で定義された引数を持っているので、それぞれの実装を変えることはできますが、可能であれば、きれいなファッション。ここ
リンクが
http://coliru.stacked-crooked.com/a/79fa58e50e7b8637
それは違いないだけオーバーライドされた機能について不平を言うならば、実際http://coliru.stacked-crooked.com/a/567d40d34199af73 – aschepler
を再現することはできませんいくつかのIFoo宣言を見つけました。あなたが望むものではないかもしれません。 –
ああ、ありがとう。だから、私はそれは私が根本的に正しいことをするが、それはどこかで間違っていることを意味すると仮定します。それは助けを助ける – chrise