簡體   English   中英

命名空間中聲明的 DataType 的 Scope

[英]Scope of DataType declared in Namespace

樣本.h

namespace Testing
{
    enum Type
    {
        DATA = 0,
        MORE_DATA
    };
}

現在在 Sample2.h 中,使用相同的命名空間,我可以訪問 Sample.h 中定義的 DataType,而不包括它嗎?

namespace Testing
{
    Type test;
}

問題出現了,因為我有實現這一點的文件,並且似乎構建沒有問題。 另一個用戶正在嘗試構建,但報告說他必須在 Sample2.h 中 #include "Sample.h" 才能構建。

大多數當前編譯器不支持前向枚舉聲明。 這是即將到來的 C++0x 的計划功能。 可以創建指向 Type 的指針,但不能實例化,這也與其他類型(結構和類)兼容。

哦,我的錯,我猜我看錯了。 無論如何,請閱讀其他內容並閱讀此內容。 標頭不是單獨編譯的。 因此,如果您沒有在 header 中包含所需的標題並將其包含在 cpp 文件中,您將不會遇到任何錯誤。 只要所有 cpp 文件都包含具有所需順序的兩個標頭,就不會出現任何問題。 但是,這不是一個好主意,最好在 header 中包含任何必要的文件,並使用 header 保護以確保它們不會被添加兩次。 我希望這是有道理的。

這些文件很可能會構建,因為一些較早的包含文件為您包含 Sample.h。 當省略較早的包含文件(或在 Sample2.h 之后移動)時,文件將不再編譯。

是的,您需要在 Sample2.h 中包含 Sample.h。 編譯器在 Sample2.h 中看不到Type的定義,因為這兩個文件中的命名空間名稱相同。

通過在 2 個文件中使用相同的命名空間名稱,您獲得的唯一好處是Type不需要在 Sample2.h 中明確說明其命名空間。 例如,如果 2 個命名空間不相同:

樣本.h

namespace Testing
{
    enum Type
    {
        DATA = 0,
        MORE_DATA
    };
}

樣本2.h

#include "Sample.h"

namespace Testing1
{
    Testing::Type test;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM