C++类中怎样对数组用构造函数初始化

classCCpu{public:CCpu(charname[],charlevel[],intprice);private:charcpufactoryname[10]... class CCpu
{
public:
CCpu(char name[],char level[],int price);
private:
char cpufactoryname[10];
char cpulevel[10];
int cpuprice;
};
CCpu::CCpu(char name[], char level[], int price)
{
memcpy(cpufactoryname,name,10);
memcpy(cpulevel,level,10);
cpuprice=price;
}
此时在另一个类中调用它的对象
class CComputer
{
CCpu cpu("ds","dfs",100);
};显示出错
但是如果是在主函数中调用则没有错误,这是为什么?
但是CCpu类和CComputer没有在一个文件中
展开
 我来答
8826055
推荐于2017-10-04 · TA获得超过7512个赞
知道大有可为答主
回答量:1680
采纳率:81%
帮助的人:948万
展开全部

有两种方法,一种是使用初始化列表,一种是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 <iostream>
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
};
郑启道
推荐于2017-09-15 · TA获得超过322个赞
知道小有建树答主
回答量:265
采纳率:0%
帮助的人:315万
展开全部
错误的原因是你在类定义里面做得初始化,把初始化部分放在类CComputer的构造函数里就ok了。

初始化的位置错误,我说得绝对没问题,可以在类定义中声明类,但是初始化一定要放在成员函数里。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yan13567
2009-11-17 · TA获得超过286个赞
知道小有建树答主
回答量:387
采纳率:0%
帮助的人:0
展开全部
另一个类调用他的对象 是否在另一个类声明了它或把那个类的文件包含进来?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式