有两种方法,一种是使用初始化列表,一种是C++11提供的类内初始化。初始化的参数通常为列表,即数组的列表初始化,对于char数组还可以用字符串字面值作为初始化的参数。
数组通常使用列表进行初始化,如果列表元素小于数组大小,则剩下的元素默认初始化(对于函数内的内置类型,其值不确定):
int main()
{
int a[3] = {0, 0, 0};
int b[] = {0, 0, 0};
int c[3] = {0} //c[0]=0,c[1]和c[2]值不确定,依赖于编译器。
return 0;
}
在类里也可以用列表来初始化:
#include
struct A {
// C++11新特性,当构造函数未初始化某个元素时,初始化为类内初始值
int a[3] = {0, 0, 0};
A() = default; //C++11新特性,指出由编译器来合成默认构造函数
A(int x, int y, int z) : a({x, y, z}) {}
};
int main() {
A a;
std::cout << a.a[0]; //0
A b(1, 1, 1);
std::cout << b.a[0]; //1
return 0;
}
特殊地,char数组可以用字符串字面值来初始化:
struct A {
char s[6] = "hello"; //必须预留一个'\0',因此s的大小至少为6
};
错误的原因是你在类定义里面做得初始化,把初始化部分放在类CComputer的构造函数里就ok了。
初始化的位置错误,我说得绝对没问题,可以在类定义中声明类,但是初始化一定要放在成员函数里。
另一个类调用他的对象 是否在另一个类声明了它或把那个类的文件包含进来?