【发布时间】:2011-06-04 01:16:44
【问题描述】:
我知道如果我想在 C++ 中的类命名空间中使用 const 数组,我做不到:
class c
{
private:
struct p
{
int a;
int b;
};
static const p pp[2];
};
const c::p pp[2] = { {1,1},{2,2} };
int main(void)
{
class c;
return 0;
}
我必须这样做:
class c
{
public:
struct p
{
int a;
int b;
};
static const p pp[2];
};
const c::p pp[2] = { {1,1},{2,2} };
int main(void)
{
class c;
return 0;
}
但这要求“p”和“pp”是公开的,而我希望它们是私有的。 C++中没有办法初始化私有静态数组吗?
编辑:-------- 感谢您的回答。另外我希望这个类是一个库,只有头文件,供主项目使用。当被多个文件包含时,包含以下初始化程序会导致“多重定义”错误。
const c::p c::pp[2] = { {1,1},{2,2} };
我该如何解决这个问题?
【问题讨论】:
-
除了实际的问题答案之外,在 C++ 中
(void)是不必要且不好的做法,就像class c什么都不是。你需要有int main() { c varname; return 0; } -
谢谢 - 为什么 (void) 是不好的做法?
-
(void) 没有任何害处,但也没有任何好处。支持与 C 的兼容性,但这可能会在未来的版本中改变。
标签: c++ arrays class initialization