问一个用new分配数组的问题

#include<iostream.h>

class test
{
public:
test(int arg)
{
m_arg=arg;
}
~test()
{
}
int getarg()
{
return m_arg;
}
private:
int m_arg;
};

int main()
{
test *p=new test[5]{(1),(2),(3),(4),(5)};
for(test *q=p;q<p+5;q++)
{
cout<<q->getarg();
}
delete []p;
return 0;
}

这段程序在编译的时候为什么在new 那一行会报错呀,请问各位怎么改正?

作者: the_venus   发布时间: 2011-06-16

没这样写的吧  
分开来 先分配空间在循环赋值

作者: hnuqinhuan   发布时间: 2011-06-16

数组不可以这么初始化。
new后面圆括号可以初始化,调用对象的构造函数。
test *p=new test[5];
for (int i=0; i<5; i++) p[i] = i+1;

作者: dizuo   发布时间: 2011-06-16

哈哈,这个新手够新的,看看书啊

作者: zhanshen2891   发布时间: 2011-06-16

test *p=new test[5]{(1),(2),(3),(4),(5)};这种写法确实不行。。。。
可以test *p=new test[5];之后利用一个循环赋值 p[i] = test(i+1);

作者: lanxue_1988   发布时间: 2011-06-16

test *p=new test[5];
这样写也不对呀,编译报错:“test”: 没有合适的默认构造函数可用。

作者: sxjgxy2009   发布时间: 2011-06-16

引用 5 楼 sxjgxy2009 的回复:
test *p=new test[5];
这样写也不对呀,编译报错:“test”: 没有合适的默认构造函数可用。

那你给class test写一个defult构造函数
因为operator new首先分配内存
然后调用class test的defult构造函数初始化这块内存
如果class test没有defult构造函数,那肯定就出问题了。

作者: joyzml   发布时间: 2011-06-16

C/C++ code

#include<iostream.h>

class test
{
public:
test(int arg)
{
m_arg=arg;
}
test()
{
 m_arg = 0;
}
~test()
{
}
int getarg()
{
return m_arg;
}
private:
int m_arg;
};

int main()
{
test *p=new test[5]{(1),(2),(3),(4),(5)};
for(test *q=p;q<p+5;q++)
{
cout<<q->getarg();
}
delete []p;
return 0;
}
给你个能运行的

作者: namelij   发布时间: 2011-06-16


初始化对象数组的方案是, 首先使用默认构造函数创建数组元素, 然后构造函数将创建临时对象, 然后将临时对象的内容复制到相应的元素中. 因此, 要创建类对象数组, 则这个类必须有默认构造函数. 
 

作者: Mr_YWS   发布时间: 2011-06-16