我需要使类 B 能够使用类 A 的相关对象的图。B 的实例按值包含 A,并链接到链接的 B 对象(数组索引)。根据 OOP 原则的规定,B 的数组必须是私有的。我已经生成了很长的初始化列表。
//What I want to do(not working)
header:
class A{};
class B{
static const B array[24]={B(A(),0,0,0,0,0,0),//zeros are numbers
...............//many rows
B(A(),0,0,0,0,0,0)};
A a;
char l[6];
public:
B(A _a,char l1, char l2, char l3,char l4, char l5, char l6);
};
//attempt with initialization in cpp
header:
class A{};
class B{
static const extern B array[24];
A a;
char l[6];
public:
B(A _a,char l1, char l2, char l3,char l4, char l5, char l6);
};
cpp:
static const B::array={B(A(),0,0,0,0,0,0),//zeros are numbers
...............//many rows
B(A(),0,0,0,0,0,0)};
我尝试了上述和类似的变体。编译器说我不能使用冲突的说明符或不完整的类型或该字段是私有的。过去,我使用命名空间而不是类,并且它有效,但是这样数组没有被封装。
//global variable in namespace(works, but not private)
header:
class A{};
class B{
A a;
char l[6];
public:
B(A _a,char l1, char l2, char l3,char l4, char l5, char l6);
};
namespace B{
const extern B array[24];
}
cpp:
const B array[24]={B(A(),0,0,0,0,0,0),//zeros are numbers
...............//many rows
B(A(),0,0,0,0,0,0)};
}
我希望有一种方法可以以某种方式制作预初始化的私有静态数组。
不确定您尝试过什么不同...似乎可以编译(并运行):
class A{};
class B{
static const B array[2];
A a;
char l[6];
public:
B(A _a,char l1, char l2, char l3,char l4, char l5, char l6) {}
};
const B B::array[2]={B(A(),0,0,0,0,0,0), B(A(),0,0,0,0,0,0)};
int main() {}