簡體   English   中英

如何在 C++ 中的命名空間內轉發聲明數組

[英]How can I forward declare an array inside a namespace in c++

我一直在嘗試找出如何正確使用命名空間。 我想使用命名空間,但不必在頭文件中定義它。 我不確定如何使用命名空間內的數組來做到這一點。 我要么收到“已定義符號”錯誤,要么被告知名稱空間尚未聲明。

我曾嘗試編寫這樣的代碼:

//Header.h

namespace foo {
    int array[5];
}
//Source.cpp

#include "Header.h"

namespace foo {
    int array[5] = {0, 1, 2, 3, 4, 5};
}

它返回一個錯誤。

如果我嘗試向前聲明命名空間,就像我對任何其他變量一樣,它表示命名空間未定義,所以我不確定實現這一點的正確方法是什么。

//Header.h

extern int foo::array;
//Source.cpp

#include "Header.h"

namespace foo {
    
    int array[5] = {0, 1, 2, 3, 4, 5};

}

這個

namespace foo {

    int array[5];

}

是數組的定義。

另一方面,這個聲明

extern int foo::array;

存在於全局命名空間而不是命名空間foo 那是命名空間foo尚未聲明,您不能使用限定名稱foo::array

要在標頭中聲明數組,請使用存儲說明符extern

namespace foo {

    extern int array[5];

}

然后在cpp文件中你可以寫例如

int foo::array[5] = {0, 1, 2, 3, 4, 5};

與全局命名空間中的方式相同:

// .h
namespace foo {
    extern int array[5];
}
// .cpp
namespace foo {
    int array[5] = {1, 2, 3, 4, 5};
}

暫無
暫無

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

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