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

C++类内char[100]数组成员赋值类型不兼容报错咨询

报错原因及修复方案

错误原因

报错核心原因是C++语法规则限制:Dto::message.text是固定长度的char[100]数组类型,数组名本身是常量指针,无法直接通过=运算符将char*类型的入参赋值给数组,只能拷贝指针指向的字符串内容到数组内存空间中。

修复方案

方案1:保留原有char数组结构的修改方式

该方案不需要改动头文件的结构体定义,只修改setText实现,额外引入<cstring>头文件使用字符串操作函数即可:

  1. 先在dto.cpp顶部引入头文件:
#include <cstring>
  1. 修改setText函数实现:
void Dto::setText(char* text)
{
    // 最多拷贝99个字符,预留1位存储字符串结束符'\0',避免内存溢出
    strncpy(Dto::message.text, text, sizeof(Dto::message.text) - 1);
    // 手动补结束符,避免传入字符串长度超过99时出现字符串未终结的问题
    Dto::message.text[sizeof(Dto::message.text) - 1] = '\0';
}

补充优化建议:可将setText的入参类型改为const char*,同时同步修改头文件中的函数声明,符合const正确性规范,也支持传入常量字符串作为参数。

方案2:推荐的现代C++实现,改用std::string

该方案不需要手动管理字符串拷贝和内存边界,代码更简洁安全,改动如下:

  1. 修改dto.h代码:
#include <string>
...
class Dto
{
    public:
        struct msg
        {
            int id;
            byte type;
            std::string text; // 替换原有的char text[100]定义
        };

        std::string getText();
        void setText(const std::string& text);

    private:
        Dto::msg message;
...
  1. 修改dto.cpp代码:
std::string Dto::getText()
{
    return Dto::message.text;
}

void Dto::setText(const std::string& text)
{
    Dto::message.text = text; // std::string已重载赋值运算符,可直接赋值
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:15:03