问题解决——warning C4503 超出修饰名的长度,名称被截断

========================声明============================

本文原创,转载请注明作者和出处,并保证文章的完整性(包括本声明)。

本文不定期修改完善,为保证内容正确,建议移步原文处阅读。

本文链接:http://blog.csdn.net/wlsgzl/article/details/42236503

=======================================================

领导要实现“以后支持各种检测项目”的功能,这分明就是在坑我。

上个月的代码算是废了,重新写起。

=======================================================

我需要实现一个存储检测标准的东西,支持“不确定的检测项目名、不确定的组成子项名、不确定的子项数目、不确定的子项梯度检测结果”,——感觉就是扔给你一个复合项目的说明书,能把说明书上标注的结果存起来,方便以后使用。

比方说“消化道七项检测”,每一个检测子项的每一种结果都要保存。

=======================================================

想了一会儿(这是个虚词),写了个模型小代码。

搞了类CProjInfo,里面有这么个东西:

std::multimap<CString,std::map<CString,std::map<LONG,CString>>> m_mmmmPI;
虽然不是很好看,但也得先看看这个思路行不行再优化。

=======================================================

编译链接,遇到了警告。

warning C4503 超出修饰名的长度,名称被截断
作为一个使用Level4编译、Ctrl+atl+E里都选中的男人,必须把这弄个明白,于是找资料。

=======================================================

找资料是个技术活,主要是看关键词的提炼。

很轻松的,找到了官方文档。

Compiler Warning (level 1) C4503

http://msdn.microsoft.com/en-us/library/074af4b6.aspx

=======================================================

文章以后再翻译,一看就懂,这里只引用一下微软的代码:

含C4503警告的代码:

// C4503.cpp
// compile with: /W1 /EHsc /c
// C4503 expected
#include <string>
#include <map>

class Field{};

typedef std::map<std::string, Field> Screen;
typedef std::map<std::string, Screen> WebApp;
typedef std::map<std::string, WebApp> WebAppTest;
typedef std::map<std::string, WebAppTest> Hello;
Hello MyWAT;

一种解决方案:

// C4503b.cpp
// compile with: /W1 /EHsc /c
#include <string>
#include <map>

class Field{};
struct Screen2 {
   std::map<std::string, Field> Element;
};

struct WebApp2 {
   std::map<std::string, Screen2> Element;
};

struct WebAppTest2 {
   std::map<std::string, WebApp2> Element;
};

struct Hello2 {
   std::map<std::string, WebAppTest2> Element;
};

Hello2 MyWAT2;

=======================传播点正能量==========================

积累,从点滴做起。俗话说得好,“千里之堤,溃于蚁穴”。















你可能要问,不是应该“千里之行,始于足下”吗?

是的,虽然你知道,但你做到了吗?

========================我反正不知道=========================

当然,简单的做法有:

1 用字符串。

   比方说解析“A|B|C-D”。

2 用数据库。



这个警告是 Visual Studio 编译器的一个常见警告,它指示某个标识符的名称超过了限制长度,因此被截断。在你提供的信息中,警告是关于 `std::_Tree<_Traits>::_Insert` 的。 这个警告通常不会导致编译错误,而只是提醒你标识符的名称截断了。这很可能是由于标准库或其他库中的一个较长的模板名称导致的。因为模板的实例化会生成非常复杂的类型名称,所以在编译器的限制下,它们可能会超过标识符的最大长度。 你可以忽略这个警告,除非它导致了其他问题或错误。如果你希望消除这个警告,可以尝试以下方法: 1. 更新编译器版本:如果你使用的是较旧的 Visual Studio 版本,尝试使用更新的版本,可能会修复此问题。 2. 修改代码结构:如果你有权修改标准库或其他库的源代码,并且确定这个警告是由于特定的模板名称导致的,你可以尝试修改代码结构以缩短标识符名称。但这可能需要更深入地了解代码和模板机制。 3. 忽略警告:如果你确定这个警告不会导致实际问题,你可以在编译器选项中将该警告视为一个无害的警告,或使用编译指令 `#pragma warning` 来忽略该警告。 请注意,这个警告通常不会对代码的功能和正确性产生影响。如果你的代码能够正常编译和运行,并且没有其他错误或异常情况,那么你可以安全地忽略这个警告。 希望这些信息能够帮助到你!如果你还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值