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

新版构建工具编译报错:'const TCHAR []'常量对象需初始化的解决方法

解决'const TCHAR []': const object must be initialized编译报错

问题原因

报错的核心是new const TCHAR[10]的写法违反了C++的const对象初始化规则:所有const类型的对象必须在创建时完成初始化,但new动态分配内存时只会预留空间,不会自动初始化const数组的内容,因此编译器抛出错误。

修改方案

方案1:移除不必要的const修饰(推荐)

如果你的缓冲区需要后续写入内容,完全不需要将其声明为const。直接去掉new后的const,同时保持LPCTSTR*的声明(因为TCHAR*可以隐式转换为LPCTSTR):

LPCTSTR *m_pszPath;

// ...

if ((m_pszPath[m_nCount] = new TCHAR[10]) != NULL) {
    // 后续可以安全地初始化缓冲区,比如使用_tcscpy_s等安全字符串函数
    _tcscpy_s(m_pszPath[m_nCount], 10, _T("test"));
}

方案2:强制初始化const数组(仅当必须使用const时)

如果业务逻辑要求缓冲区必须是const,你需要在分配时直接完成初始化。注意初始化的字符串长度不能超过数组大小:

LPCTSTR *m_pszPath;

// ...

// 用空字符串初始化const数组,确保每个元素都被初始化为0
if ((m_pszPath[m_nCount] = new const TCHAR[10]()) != NULL) {
    // 此时数组内容为全0(空字符串),但无法修改
}

// 或者直接用字面量初始化(注意字面量长度+1不能超过数组大小)
if ((m_pszPath[m_nCount] = new const TCHAR[10]{_T("init")}) != NULL) {
    // 数组前4个元素是"init",剩余元素被初始化为0
}

额外提示

动态分配const类型的数组通常没有实际意义——因为const数组无法被修改,直接使用字符串字面量(如_T("fixed path"))会更高效,无需动态分配内存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 15:54:56