error:没有合适的默认构造函数可用 ,一般也是这个问题
括号分为两种,中括号[]或小括号()。
为方便说明,定义指针类型为class test, 指针为
test *ptest;
一、 中括号的情况。
中括号是用来标示申请的是一个对象,还是一组对象。
1 没有中括号时,即ptest = new test; 这时ptest得到的是一个对象*ptest, 释放时使用delete ptest;
2 带有中括号时,在中括号中需要有一个正整数参数。
ptest = new test[N];
N可以是变量,也可以是常量。
这时申请到的ptest指向的空间是N个连续的对象ptest[0],ptest[1]...ptest[N-1],即可以当做一个数组使用。
释放时需要调用delete [] ptest;
二、小括号的情况。
小括号是用来指定初始化参数,用于类指针时,就是指定调用哪个构造函数。
1 有小括号时,小括号中可以有若干参数,也可以没有参数。
比如
ptest = new test(); 这样在构造时就会调用无参构造test();
ptest = new test(1); 就会调用构造函数test(int),即一个整型参数的构造函数。
2 没有小括号时,默认调用无参构造。
即
ptest = new test;
和ptest = new test();是一样的。