我有一些共享文件,我想在兩個具有相同編譯目標並且非常相同的程序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