C++ 如何在c+;中的名称空间内向前声明数组+;

C++ 如何在c+;中的名称空间内向前声明数组+;,c++,namespaces,declaration,definition,name-lookup,C++,Namespaces,Declaration,Definition,Name Lookup,我一直在试图找出如何正确使用名称空间。我想使用名称空间,但不必在头文件中定义它。我不知道如何使用名称空间中的数组实现这一点。我要么得到一个“已定义符号”错误,要么被告知名称空间尚未声明 我曾尝试编写如下代码: //Header.h 名称空间foo{ int数组[5]; } //Source.cpp #包括“Header.h” 名称空间foo{ int数组[5]={0,1,2,3,4,5}; } 然后返回一个错误 如果我尝试向前声明名称空间,就像我会声明任何其他变量一样,它会说名称空间未定义,

我一直在试图找出如何正确使用名称空间。我想使用名称空间,但不必在头文件中定义它。我不知道如何使用名称空间中的数组实现这一点。我要么得到一个“已定义符号”错误,要么被告知名称空间尚未声明

我曾尝试编写如下代码:

//Header.h
名称空间foo{
int数组[5];
}
//Source.cpp
#包括“Header.h”
名称空间foo{
int数组[5]={0,1,2,3,4,5};
}
然后返回一个错误

如果我尝试向前声明名称空间,就像我会声明任何其他变量一样,它会说名称空间未定义,所以我不确定实现这一点的正确方法是什么

//Header.h
外部intfoo::数组;
//Source.cpp
#包括“Header.h”
名称空间foo{
int数组[5]={0,1,2,3,4,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};
这个

是数组的定义

另一方面,这项宣言

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];
}

与全局命名空间中的方式相同:

// .h
namespace foo {
    extern int array[5];
}

这很有意义,在头文件中声明和定义名称空间是最佳实践吗?或者我应该避免在这个场景中使用名称空间吗?有意义的是,在头文件中声明和定义名称空间是最佳实践吗?或者我应该避免在这个场景中使用名称空间哦,哇,这很有道理。我很生气,我没有想到那一点。非常感谢。哦,哇,这很有道理。我很生气,我没有想到那一点。非常感谢。非常感谢。在
.cpp
文件中,我感觉自己像个傻瓜,您可以选择使用
intfoo::array[5]={1,2,3,4,5}而不使用另一个
命名空间{}
块。但是,如果在同一名称空间中定义了其他内容,则可以使用该块。谢谢!在
.cpp
文件中,我感觉自己像个傻瓜,您可以选择使用
intfoo::array[5]={1,2,3,4,5}而不使用另一个
命名空间{}
块。但是,如果在同一名称空间中定义了其他内容,则可以使用该块。