class Base
{
public:
int i;
Base(int j):i(j){}
};
int main()
{
Base B(10);
Base C[10](B);//throws error saying bad array initializer
}
当我尝试编译此代码时,抛出了上述错误。
为什么C ++不编译此代码?
为什么每个对象都无法调用它的默认复制构造函数并使用B的成员值?
我是否遗漏了C ++标准中的内容?
答案 0 :(得分:2)
Base C[10](B);
这是C ++中错误的语法;您不能通过传递参数来初始化普通对象数组。
答案 1 :(得分:0)
Base C[10];
也不起作用。 您还需要声明一个默认构造函数,因为您指定了一个将int作为输入,因此默认构造函数不会生成。
答案 2 :(得分:0)
至于我,我认为没有任何理由说明这种结构
Base C[10](B);
或者例如以下
Base *C = new Base[10]( 8 );
无效。它仅取决于您希望如何定义语义。
但是历史上,在C ++中初始化聚合时,使用了brace-init列表。
所以你可以写
Base C[10]{ B, 8, 8, 8, 8, 8, 8, 8, 8, 8 };