我一直在使用this code來封送C++/CLI中的字符串一段時間。最近我已經更新到VS 2012 RC來試用它。我非常喜歡這個簡單的設計,但是我的任何包含clix.h的項目都可以編譯。它在2010年效果很好...可能是什麼問題?謝謝您的回答!VS 2012模板錯誤
以下是編譯器輸出:
- 警告C4346: 「CLIX ::詳細:: IsManagedString :: Result'dependent名稱是 不是一個類型。
- 錯誤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 keywoard someplace。閱讀http://msdn.microsoft.com/en-us/library/tsx7wabs(v=vs.80).aspx – Suma 2012-07-30 11:27:32
請添加一個最小的編譯示例,顯示問題 – TemplateRex 2012-07-30 11:34:51
[Here's](http:// dl。 dropbox.com/u/2267124/Template%20problem.rar)一個簡單的項目,它可以在2012年再現問題。 請注意,我不知道是否能夠在2010年重現它。 – Zylius 2012-07-30 11:44:28