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

VS2019编译器错误/警告码查询方法及C++代码编译报错问题求解

VS2019编译器错误/警告查询方法及代码问题修复方案

错误和警告码查询方法

你遇到的G开头的随机编码是VS为交叉编译错误生成的本地临时标识,无实际参考价值,直接看后方的错误描述即可。
如果是MSVC原生编译器的错误,直接在VS错误列表中右键对应错误,选择「显示错误帮助」,或选中错误码按下F1即可调出官方说明文档。你当前的告警里带[-Wwrite-strings]标识,说明用的是GCC类编译器,错误描述本身已经给出了问题根源,直接按描述排查即可。

现有问题修复方案

警告 ISO C++ forbids converting a string constant to 'char*' 修复

问题根源:C中字符串常量为const char*只读类型,你结构体中定义的成员为可修改的char*类型,赋值时类型不匹配,不符合C标准。
修复方法:将结构体中所有char*改为const char*即可,修改后的结构体代码如下:

typedef struct
{
    const char* outputpinno[16];
    const char* outputname[16];
    const char* inputpinno[16];
    const char* inputname[16];
    const char* Analogpinno[8];
    const char* Analogname[8];
    const char* CanName[8];
} pme_T;

错误 'Pme' does not name a type 及数组初始化问题修复

问题根源:

  1. 你写的Pme[0].outputpinno[16] = {...}写法错误:C++不支持在数组定义完成后,用大括号批量给数组成员赋值;且outputpinno[16]是访问数组的第17个元素(下标从0开始),本身已经越界,不代表整个数组。
  2. 「Pme不命名类型」报错是因为你将赋值代码写在了全局作用域,全局作用域仅支持变量定义,不支持执行赋值语句,编译器会把赋值代码识别为新的变量定义,因此报找不到Pme类型的错误。
    修复方法:二选一即可

方案1:定义变量时直接初始化

pme_T Pme[2] = {
    // 初始化第一个pme_T元素
    {
        // 对应outputpinno数组成员
        {"J1-12", "J1-1", "J2-12", "J2-1", "J3-12", "J3-1", "J4-12", "J4-1", "J1-7", "J1-6", "J2-7", "J2-6", "J3-7", "J3-6", "J4-7", "J4-6"},
        // 剩余outputname、inputpinno等成员按顺序补充初始化值,无值可留空或填NULL
        {}, {}, {}, {}, {}, {}
    },
    // 初始化第二个pme_T元素,按需填充值
    {}
};

方案2:在函数内部逐个赋值

// 函数内部实现赋值
const char* pinno_temp[16] = {"J1-12", "J1-1", "J2-12", "J2-1", "J3-12", "J3-1", "J4-12", "J4-1", "J1-7", "J1-6", "J2-7", "J2-6", "J3-7", "J3-6", "J4-7", "J4-6"};
for (int i = 0; i < 16; i++) {
    Pme[0].outputpinno[i] = pinno_temp[i];
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:57:03