轉發聲明類我非常驚訝地得知,我無法向前從另一個範圍使用範圍解析運算符聲明一個類,即在命名空間
class someScope::someClass;
相反,完整的聲明已被用作如下:
namespace
{
class someClass;
}
有人可以解釋爲什麼會出現這種情況嗎?
更新:澄清,我要求爲什麼這是這種情況。
轉發聲明類我非常驚訝地得知,我無法向前從另一個範圍使用範圍解析運算符聲明一個類,即在命名空間
class someScope::someClass;
相反,完整的聲明已被用作如下:
namespace
{
class someClass;
}
有人可以解釋爲什麼會出現這種情況嗎?
更新:澄清,我要求爲什麼這是這種情況。
好像答案就在C++規格:標準
3.3.5 「命名空間內」。名稱空間中的體 聲明
實體被說成是 命名空間的成員,並且通過引入 名稱這些聲明到命名空間 的 聲明性區域被認爲是 命名空間的成員名稱。
命名空間構件還可以是 應用於 其命名空間的名稱或它的名稱提名 構件的名字空間在 using-一個命名空間的 (5.1)的範圍::分辨率 操作之後稱爲指示;
我不知道爲什麼。也許是因爲在你的第一個代碼片段中,someScope
是未聲明的。它可以是名稱空間或類名。如果someScope是一個類名,你不能獨立地轉發聲明另一個類的類成員。
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