RAD Studio 2010 中的错误 yaml-cpp 编译
Posted
技术标签:
【中文标题】RAD Studio 2010 中的错误 yaml-cpp 编译【英文标题】:Error yaml-cpp compile in RAD Studio 2010 【发布时间】:2010-03-05 12:13:38 【问题描述】:我无法在 RAD Studio 2010 中编译 yaml-cpp
。我在 nodeutil.h
中有错误
template <typename T, typename U>
struct is_same_type
enum value = false ;
;
template <typename T>
struct is_same_type<T, T>
enum value = true ;
;
template <typename T, bool check>
struct is_index_type_with_check
enum value = false ;
;
template <> struct is_index_type_with_check<std::size_t, false>
enum value = true ; ; // line 24
#define MAKE_INDEX_TYPE(Type) \
template <> struct is_index_type_with_check<Type, is_same_type<Type, std::size_t>::value> enum value = true ;
MAKE_INDEX_TYPE(int);
MAKE_INDEX_TYPE(unsigned); // line 30
MAKE_INDEX_TYPE(short);
MAKE_INDEX_TYPE(unsigned short);
MAKE_INDEX_TYPE(long);
MAKE_INDEX_TYPE(unsigned long);
#undef MAKE_INDEX_TYPE
编译器打印:
[BCC32 Error] nodeutil.h(30): E2238 Multiple declaration for 'is_index_type_with_check<unsigned int,0>'
[BCC32 Error] nodeutil.h(24): E2344 Earlier declaration of 'is_index_type_with_check<unsigned int,0>'
我认为所有正确 - 在第 24 行我得到了
is_index_type_with_check<std::size_t, false>
,
在第 30 行我得到了
is_index_type_with_check<unsigned, true>
。
两种不同的类型。
但如果我像下面这样更改第 24 行,RAD Studio 可以编译 yaml-cpp
template <> struct is_index_type_with_check<std::size_t, true> enum value = true ; ; // false -> true
为什么?!在第 24 行我得到了
is_index_type_with_check<std::size_t, true>
在第 30 行
is_index_type_with_check<unsigned, true>
两个相同的类型。但所有这些都可以在 RAD Studio 中运行,而不能在 MS VS 2008 Express 中运行。
【问题讨论】:
你想在问题的最后一个块中写std::size_t, true
?
我写这个。但我不明白两件事 - 为什么第一选择是错误的,为什么第二选择有效。我认为这与 SFINAE 相关,但在我的系统中 std::size_t
等于 unsigned int
。
【参考方案1】:
用 CodeBlocks 测试您的代码,问题正好相反。这意味着,我的代码编译与
template <> struct is_index_type_with_check<std::size_t, false>
失败了
template <> struct is_index_type_with_check<std::size_t, true>
在第 24 行。
问题似乎是,编译器认为哪些类型相同,哪些不同。这个问题分布在编译过程的不同阶段。再次查看您的编译器错误。 is_index_type_with_check
的模板参数对于std::size_t
和unsigned
是相同的。这意味着,您的编译器认为std::size_t
和unsigned
是模板参数推导的不同类型(is_same_type::value == false
),但类型推导后来发现std::size_t
和unsigned
属于同一类型unsigend int
并报错。
所以总结一下,您没有正确读取编译器错误 - MAKE_INDEX_TYPE(unsigned);
创建了一个 is_index_type_with_check<unsigned int, false>
。该类型与您的template <> struct is_index_type_with_check<std::size_t, false>
冲突,编译器抱怨。
【讨论】:
以上是关于RAD Studio 2010 中的错误 yaml-cpp 编译的主要内容,如果未能解决你的问题,请参考以下文章
C++Builder (RAD Studio) 中的范围检查错误
RAD Studio 10 安装失败 提示错误 License status check failure解决办法
如何更改 RAD Studio(2010 及更高版本)IDE 格式化我的代码的方式?
rad studio 11可以打开c++builder6.0的工程吗
装delphi2010,用)RAD Studio 2010 V14.3615 iso ,为啥我用Delphi.Distiller.v1.85破解工具破解不了,