2014-12-05 83 views
0
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++标准中的东西吗?

+1

你可以做到这一点与向量:'的std ::向量 V(10,底座(10));' – Borgleader 2014-12-05 14:18:34

+0

你可以使用一个初始化列表,但是这将没有你想要的行为 – Rerito 2014-12-05 14:22:05

+0

@leemes哎呀,是的,我的意思是。 **修正了它** – Borgleader 2014-12-05 14:22:08

回答

2
Base C[10](B); 

这是C++中的错误语法;您不能通过传递参数来初始化普通对象的数组。

0
Base C[10]; 

也不起作用。 您还需要声明一个默认构造函数,如您所指定的那样,将int作为输入,以便不生成默认构造函数。

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 };