2012-07-30 81 views
1

我一直在使用this code來封送C++/CLI中的字符串一段時間。最近我已經更新到VS 2012 RC來試用它。我非常喜歡這個簡單的設計,但是我的任何包含clix.h的項目都可以編譯。它在2010年效果很好...可能是什麼問題?謝謝您的回答!VS 2012模板錯誤

以下是編譯器輸出:

  1. 警告C4346: 「CLIX ::詳細:: IsManagedString :: Result'dependent名稱是 不是一個類型。
  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找到。

+0

很有可能你缺少typename keywoard someplace。閱讀http://msdn.microsoft.com/en-us/library/tsx7wabs(v=vs.80).aspx – Suma 2012-07-30 11:27:32

+0

請添加一個最小的編譯示例,顯示問題 – TemplateRex 2012-07-30 11:34:51

+0

[Here's](http:// dl。 dropbox.com/u/2267124/Template%20problem.rar)一個簡單的項目,它可以在2012年再現問題。 請注意,我不知道是否能夠在2010年重現它。 – Zylius 2012-07-30 11:44:28

回答

2

你可能只是貼在我的博客的問題,它沒有放棄或任何:)

我碰巧有安裝Visual Studio 2012 RC和固定的問題。您可以在鏈接的位置找到新版本的clix頭文件。

背景:它看起來微軟的新編譯器有點挑剔嵌套模板中的父類模板專用於整數類型的類型定義。無論如何,我發現了一種既適用於Visual C++ 2010又適用於Visual C++ 2012 RC的方法。

+0

非常感謝您保持更新。這是一個偉大的代碼! – Zylius 2012-07-30 16:37:09

+0

謝謝,非常有幫助! – 2013-05-06 11:09:09