我如何在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,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,5};
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...