我有一些共享文件,我想在两个具有相同编译目标并且非常相同的程序A和B之间使用。C++组合命名空间
所以,我试图将它们分成两个命名并创建一个共享命名空间的共享文件
Interfaces.h
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类呢?
编辑: 看起来我错过了导致问题的重要部分。我预先声明了一个类,它是接口方法的一个参数。现在我已经在共享命名空间中预先声明了,并且在namsepace中实际声明了这些事情已经不再一样了。
有没有很好的方法来解决这个问题?只有一小部分接口具有在一个或另一个名称空间(A或B)中定义的参数,所以我可以在每个接口中留下不同的实现,但如果可能的话,将它全部放在共享空间中将会很好一个干净的时尚。
这里是一个链接 http://coliru.stacked-crooked.com/a/79fa58e50e7b8637
无法重现http://coliru.stacked-crooked.com/a/567d40d34199af73 – aschepler
其实如果抱怨只有重载函数,那么它一定是发现了一些IFoo声明,也许不是你想要的那个 –
哦,谢谢。所以,我认为这意味着我从根本上做正确的事情,但在某个地方做错了。这有助于了解 – chrise