VS 2012 模板错误
Posted
技术标签:
【中文标题】VS 2012 模板错误【英文标题】:VS 2012 template errors 【发布时间】:2012-07-30 11:05:53 【问题描述】:一段时间以来,我一直在使用this code 在 C++/CLI 中编组字符串。最近我已经更新到 VS 2012 RC 来尝试一下。我真的很喜欢这个简单的设计,但是我没有一个包含 clix.h 的项目可以编译。它在 2010 年工作得很好......可能是什么问题?谢谢您的回答!
这是编译器输出:
-
警告 C4346:
'clix::detail::IsManagedString::Result' 依赖名是
不是类型。
错误 C2988:无法识别的模板声明/定义
错误 C2059:语法错误:'
错误 C2039:“结果”:不是“全局命名空间”的成员
错误 C2143:语法错误:缺少 ';'在''之前
代码块错误在:
typename detail::Select<detail::IsManagedString<SourceType>::Result>::Type<
typename detail::StringTypeSelecter<encoding>::Type,
System::String ^>::Result marshalString(SourceType string)
// Pass on the call to our nifty template routines
return detail::StringMarshaler<
detail::IsManagedString<SourceType>::Result ? detail::CxxFromNet : detail::NetFromCxx
>::marshal<encoding, SourceType>(string);
一个例子,源文件:
#include "clix.h"
int main()
Clix 头文件可以在这个link找到。
【问题讨论】:
您很可能在某个地方缺少 typename 关键字。阅读msdn.microsoft.com/en-us/library/tsx7wabs(v=vs.80).aspx 请添加一个显示问题的最小编译示例 Here's 一个在 vs 2012 中重现问题的简单项目。请注意,我不知道是否能够在 vs 2010 中重现它。 @rhalbersma 在这种情况下应该是“一个最小的非编译示例”。 :) @Zylius 仅提取重要部分。我怀疑有人会下载项目并阅读近 200 行代码来回答您的问题。 【参考方案1】:你可以在我的博客上发布这个问题,它没有被放弃或任何东西:)
我碰巧安装了 Visual Studio 2012 RC 并解决了这个问题。您可以在您链接的位置找到新版本的 clix 标头。
背景:微软的新编译器似乎对嵌套模板中的 typedef 有点挑剔,其父模板专门用于整数类型。无论如何,我找到了一种适用于 Visual C++ 2010 和 Visual C++ 2012 RC 的方法。
【讨论】:
非常感谢您保持更新。这是一个很棒的代码!以上是关于VS 2012 模板错误的主要内容,如果未能解决你的问题,请参考以下文章
为啥这个私有模板函数会编译? -> 编译器错误 VS 2009