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

C++ vs. D、Ada 和 Eiffel(带有模板的可怕错误消息)

模板类的 VS 编译器错误

真实项目中VS2015中自建T4模板生成文件的使用

VS 2011 模板类

无法在 VS2017 上转换 T4 模板