问题描述
我一直在尝试找出如何正确使用命名空间的方法。我想使用名称空间,但不必在头文件中定义它。我不确定如何使用名称空间中的数组来执行此操作。我或者收到“已经定义的符号”错误,或者被告知尚未声明名称空间。
我试图编写这样的代码:
//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};
}