【问题标题】:VS 2012 template errorsVS 2012 模板错误
【发布时间】:2012-07-30 11:05:53
【问题描述】:

一段时间以来,我一直在使用this code 在 C++/CLI 中编组字符串。最近我已经更新到 VS 2012 RC 来尝试一下。我真的很喜欢这个简单的设计,但是我没有一个包含 clix.h 的项目可以编译。它在 2010 年工作得很好......可能是什么问题?谢谢您的回答!

这是编译器输出:

  1. 警告 C4346: 'clix::detail::IsManagedString::Result' 依赖名是 不是类型。
  2. 错误 C2988:无法识别的模板声明/定义
  3. 错误 C2059:语法错误:'
  4. 错误 C2039:“结果”:不是“全局命名空间”的成员
  5. 错误 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 行代码来回答您的问题。

标签: c++ string templates marshalling visual-studio-2012


【解决方案1】:

你可以在我的博客上发布这个问题,它没有被放弃或任何东西:)

我碰巧安装了 Visual Studio 2012 RC 并解决了这个问题。您可以在您链接的位置找到新版本的 clix 标头。

背景:微软的新编译器似乎对嵌套模板中的 typedef 有点挑剔,其父模板专门用于整数类型。无论如何,我找到了一种适用于 Visual C++ 2010 和 Visual C++ 2012 RC 的方法。

【讨论】:

  • 非常感谢您保持更新。这是一个很棒的代码!
猜你喜欢
  • 2014-10-21
  • 2012-12-05
  • 1970-01-01
  • 1970-01-01
  • 2012-12-10
  • 2012-11-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-25
相关资源
最近更新 更多