C++在类里面定义对象数组,初始化出错,怎样解决
#include<iostream>
#include<cstdlib>
#define LEN 10
using namespace std;
struct A{
int a;
A();
A(int a=0);
};
A::A(){
}
A::A(int a){
this->a=a;
}
struct ObjArray{
A array[LEN];
int i;
ObjArray();
//~ObjArray();
};
ObjArray::ObjArray(){
for(int i=0;i<LEN;i++)array[i]=A(i);
this->i=0;
}
/*
ObjArray::~ObjArray(){
delete []array;
}*/
void main(){
ObjArray objarray();
for(int i=0;i<LEN;i++)
cout<<objarray.array[i].a<<endl;
system("pause");
}
----------vc++6.0调试信息
Compiling...
useObjArray.cpp
R:\C++Test\useObjArray.cpp(10) : warning C4520: 'A' : multiple default constructors specified
R:\C++Test\useObjArray.cpp(37) : error C2228: left of '.array' must have class/struct/union type
R:\C++Test\useObjArray.cpp(37) : error C2228: left of '.a' must have class/struct/union type
执行 cl.exe 时出错.
useObjArray.obj - 1 error(s), 0 warning(s)
[解决办法]
ObjArray objarray();
ObjArray objarray;
int a;
A();
A(int a=0);
};
这里你不用任何参数来定义A时,例如:A a;这时候编译会觉得调用A()也行调用A(int a=0);也行,编译器就糊涂了,它不知道该调用哪个了。
另外,这里A(int a=0);会让A进行隐式转换的,不过这里是根据需要决定是否需要禁止隐式转换,这个问题不会报错但是一旦在大项目中开发的时候就需要特别注意这个问题了。
关于隐式转换的请看下面文章中对关键字“explicit”的解释。
http://blog.csdn.net/hjx_1000/article/details/7960579