You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中如何为多个类对象的公有成员变量分别赋值

解答

你的代码存在基础语法错误:co是C类型的对象数组,每个数组元素都是C类的实例对象,不是指向C类型的指针,因此不能使用指针专用的->运算符访问成员,访问普通对象的成员需要使用.运算符。
以下是几种可正确实现需求的写法:

1. 最小改动修正原代码

仅替换错误的成员访问运算符即可,完全保留你原本的代码逻辑:

class C{
    public:
        int foo;
};

int main(){
    C co[3];
    co[0].foo = 20;
    co[1].foo = 40;
    co[2].foo = 80;
}

2. 聚合初始化(简洁写法)

由于你的C类是无自定义构造函数、无私有/保护成员的聚合类型,支持聚合初始化,可以在声明数组时直接完成所有成员的赋值,不需要后续单独写赋值语句:

class C{
    public:
        int foo;
};

int main(){
    // C++20及以上支持指定成员初始化
    C co[3] = {{.foo=20}, {.foo=40}, {.foo=80}};
    // 低版本C++可省略成员名按成员声明顺序赋值:C co[3] = {{20}, {40}, {80}};
}

3. 适配->运算符的写法(不推荐)

如果你坚持要使用->运算符访问成员,需要将数组定义为C*指针类型,注意需要手动管理内存,实际开发中无特殊需求不建议这么写:

class C{
    public:
        int foo;
};

int main(){
    C* co[3];
    for (int i = 0; i < 3; i++) {
        co[i] = new C();
    }
    co[0]->foo = 20;
    co[1]->foo = 40;
    co[2]->foo = 80;
    // 使用完成后必须释放堆内存,避免内存泄漏
    for (int i = 0; i < 3; i++) {
        delete co[i];
    }
}

内容的提问来源于stack exchange,提问作者Cheesewaffle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 02:21:23