的提前聲明我有以下的命名空間和類層次結構:全球友元函數
namespace Ns1 {
class Outer {
private:
class Inner {
};
QSet<Inner> set;
};
}
現在我需要聲明一個全局函數:
uint qHash(Ns1::Outer::Inner const& el);
bool operator==(Ns1::Outer::Inner const& el1,
Ns1::Outer::Inner const& el);
因此函數必須是一個朋友到外和內在。 的問題,並表明該功能是在全球範圍內:
friend uint qHash(Ns1::Outer::Inner const& el);
friend operator==(Ns1::Outer::Inner const& el1,
Ns1::Outer::Inner const& el);
我不能處理這種情況的前置聲明。任何解決方案
爲什麼這個功能需要是一個「全局」功能?我認爲問題本身就在這裏。如果它可以接受的參數是'Ns1 :: Outer :: Inner',那麼在命名空間'Ns1'之外我沒有看到任何要點。鑑於'Inner'是'private'到'Outer',我也沒有看到任何使它成爲非成員函數的觀點。 – Nawaz 2013-02-27 14:58:40
Plz。問題是我說的問題。不要讓你個人的假設。如果存在,請給出解決方案。 – user14416 2013-02-27 15:00:42
如果'Inner'是私有的,你希望如何獲得一個'Inner'對象來將它傳遞給函數?這看起來像一個設計問題 - 就像'friend'的許多用法一樣。不,你不需要'f'成爲'Inner'的朋友 - 除非它使用私有/受保護的方法。 – 2013-02-27 15:01:03