1

このコードを使用して、しばらくの間 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 ヘッダー ファイルは、このリンクにあります。

4

1 に答える 1

2

あなたは私のブログに問題を投稿しただけかもしれませんが、それは放棄されたものではありません:)

たまたま Visual Studio 2012 RC をインストールして問題を修正しました。リンクした場所で新しいバージョンの clix ヘッダーを見つけることができます。

背景: Microsoft の新しいコンパイラは、親テンプレートが整数型に特化されているネストされたテンプレートの typedef に関して、少しうるさいようです。いずれにせよ、Visual C++ 2010 と Visual C++ 2012 RC の両方で機能するメソッドを見つけました。

于 2012-07-30T15:37:53.843 に答える