2010-07-19 166 views
13

轉發聲明類我非常驚訝地得知,我無法向前從另一個範圍使用範圍解析運算符聲明一個類,即在命名空間

class someScope::someClass; 

相反,完整的聲明已被用作如下:

namespace 
{ 
    class someClass; 
} 

有人可以解釋爲什麼會出現這種情況嗎?

更新:澄清,我要求爲什麼這是這種情況。

+0

Duplicate:http://stackoverflow.com/questions/1368642/is-there-a-shorter-way-to-forward-declare-a-class-in-a-namespace技術答案,從這個問題:http://stackoverflow.com/questions/1368642/is-there-a-shorter-way-to-forward-declare-a-class-in-a-namespace/1368738#1368738 – GManNickG 2010-07-19 09:26:05

回答

6

好像答案就在C++規格:標準

3.3.5 「命名空間內」。名稱空間中的體 聲明

實體被說成是 命名空間的成員,並且通過引入 名稱這些聲明到命名空間 的 聲明性區域被認爲是 命名空間的成員名稱。

命名空間構件還可以是 應用於 其命名空間的名稱或它的名稱提名 構件的名字空間在 using-一個命名空間的 (5.1)的範圍::分辨率 操作之後稱爲指示;

1

我不知道爲什麼。也許是因爲在你的第一個代碼片段中,someScope是未聲明的。它可以是名稱空間或類名。如果someScope是一個類名,你不能獨立地轉發聲明另一個類的類成員。

8

您不能在其名稱空間外聲明一個類,因爲編譯器無法識別someScope的類型。

命名空間{}需要申報命名空間的存在,然後宣佈類SomeClass的到你的範圍。

+0

你不回答我的問題,雖然,我在問爲什麼這種情況不是如何繞過它 - 我已經知道了。 :-) – Konrad 2010-07-19 10:07:39

+1

恕我直言,這個決定被選中,以區分someClass :: someMember和someNamespace :: someClass。如何處理呢? – Doomsday 2010-07-19 10:46:43