我有一个相当大的和复杂的程序集,从VC8端口到VC9。其中一个模块具有多个分层typedef,这会导致编译器生成C4503警告(装饰名称被截断)。生成的LIB文件将无法正确链接到项目中的其他模块。 VC8在这方面没有任何问题,这导致我得出结论,装饰过程已经改变以产生更长的名字,或者装饰名称长度的内部限制已经减少。解决这个问题的最好方法是什么?如何在VC9(MSVC 2008)中增加允许的装饰名称长度?
对于遗留代码的原因,MSDN建议用结构替换typedef是不实际的。
有问题的类型定义是(消毒代码):
enum Type{
TYPE_COUNT,
TYPE_VALUE
};
typedef MyVector< Container*, CriticalSectionLock > Containers;
typedef MyVector< MyClassType*, CriticalSectionLock >::const_iterator const_iterator_type;
typedef MyVector< stl::pair< string, Type > >::const_iterator const_iterator_def;
typedef MyVector< Container** >::const_iterator const_iterator_container;
typedef MyVector< stl::pair < MyBase*, MyVector< stl::pair< Container**, Containers* > > > >::const_iterator const_iterator;
只是很高兴我没有在该代码上工作。 – Kibbee 2008-11-02 01:11:40
如果在构建链接到库的模块时构建库时截断的装饰名称被截断,则即使面对此警告,它是否会继续正常链接?还是你有多个符号只在截断点之后才有所不同? – GBegen 2009-02-04 18:37:32