热点推荐

查看: 717|回复: 0
收起左侧

[已解决] warning C4503 超出修饰名的长度,名称被截断 如何解决?

[复制链接]
  • TA的每日心情
    耍酷
    前天 10:57
  • 签到天数: 562 天

    连续签到: 9 天

    [LV.9]以坛为家II

    348

    主题

    1301

    帖子

    6280

    积分

    Rank: 9

    积分
    6280

    突出贡献优秀版主荣誉管理论坛元老切换助手验证会员最佳新人

    发表于 2018-5-31 15:49:20 | 显示全部楼层 |阅读模式

    51Halcon诚邀您的加入,专注于机器视觉开发与应用技术,我们一直都在努力!

    您需要 登录 才可以下载或查看,没有帐号?会员注册

    x
    程序中定义了一些新类型从map和vector,然后就出现了下面的错误:
    1. warning C4503 超出修饰名的长度,名称被截断  
    复制代码
    查看了官方的文档:https://msdn.microsoft.com/en-us/library/074af4b6.aspx

    说白了就是如果你定义了下面这些类型就会出现C4503错误:
    1. // C4503.cpp  
    2. // compile with: /W1 /EHsc /c  
    3. // C4503 expected  
    4. #include <string>  
    5. #include <map>  
    6.   
    7. class Field{};  
    8.   
    9. typedef std::map<std::string, Field> Screen;  
    10. typedef std::map<std::string, Screen> WebApp;  
    11. typedef std::map<std::string, WebApp> WebAppTest;  
    12. typedef std::map<std::string, WebAppTest> Hello;  
    13. Hello MyWAT;  
    复制代码

    那么要有效解决这个问题怎么办? 我们可以定义一个结构体struct把这些定义写到结构体里面即可,参考下面即可有效解决C4503错误。
    1. // C4503b.cpp  
    2. // compile with: /W1 /EHsc /c  
    3. #include <string>  
    4. #include <map>  
    5.   
    6. class Field{};  
    7. struct Screen2 {  
    8.    std::map<std::string, Field> Element;  
    9. };  
    10.   
    11. struct WebApp2 {  
    12.    std::map<std::string, Screen2> Element;  
    13. };  
    14.   
    15. struct WebAppTest2 {  
    16.    std::map<std::string, WebApp2> Element;  
    17. };  
    18.   
    19. struct Hello2 {  
    20.    std::map<std::string, WebAppTest2> Element;  
    21. };  
    22.   
    23. Hello2 MyWAT2;  
    复制代码
    这个问题的原因官方文档说是超过了编译器限制的大小4096了,所以通过这种方式将类型换一种方式存在,这样单个类型就标识符就不会超标了。

    无效附件更新 权限提升操作 删帖申请 举报以及其他需要帮助请加入QQ群:214663141 广告位招商 有意者联系
    您需要登录后才可以回帖 会员登录 | 会员注册

    本版积分规则

    经营性网站备案信息 经营性网站
    备案信息

    中国互联网举报中心 中国互联网
    举报中心

    中国文明网传播文明 中国文明网
    传播文明

    诚信网站

    深圳市市场监督管理局企业主体身份公示 工商网监
    电子标识