2009-06-15 20 views
6

Managed C++でアプリケーションを作成しようとしていますが、文字列の配列を宣言する方法を考えることができません。Managed C++での文字列の配列

文字列^ linet [];

エラーがスローされます「システム::文字列^」:だから私は、管理対象データのためにこれを行うには別の方法がありますと仮定ネイティブ配列は、このマネージ型

を含めることはできませんタイプ。それは正確に何ですか?

+0

ほんの少しnitpick:私の知識を意志同じコードにコンパイルするC++&C++/CLI管理しながら、彼らは、実際には2つの異なる言語です。 –

答えて

7

本当にManaged C++を意味しますか? C++/CLIでない?

が管理されているアレイを作成する文字列と同じタイプ、つまり:

これには2つの方法がありますが、あなたが実際に(なぜなら、あなたが投稿エラーメッセージの)C++/CLIを使用していると仮定すると、 [] C#で。

gcroot<String^>[] unmanagedArray; 

は、アンマネージC++の配列を作成します(私は実際の配列でこれを試したことがありません - それはあまりにも、ここでは動作するはずですので、それは、STLコンテナとうまく動作します)。あなたがすべてであなたを自分の変数の型を検討する必要があるマネージドC++(++/CLI別名。C++/CLR別名。C)で作業する場合、あなたが:)

を必要とするすべての答えを持っている必要があり

+1

String-> Split()(文字列バージョンの配列)を呼び出すときはどうですか? –

+0

@ user645280 - 配列^sa = str->分割(gcnew配列 {"one"、 "two"}、StringSplitOptions ::なし); spit文字列を使用する場合は、StringSplitOptionsを指定する必要があります。 – erict

4

http://www.codeproject.com/KB/mcpp/cppcliarrays.aspx

行う。すべての "managed"型(基本的にSystem :: Objectから派生したもの)は、管理されたコンテキストでのみ使用できます。標準的なC++配列は、基本的に、sizeof(type)x NumberOfItemsバイトでヒープ上に固定サイズのメモリブロックを作成し、それを繰り返します。管理された型は、元々のヒープ上に同じ場所を残すことができません。そのため、できません。

+0

ほんの少しのニックピット:Managed C++とC++/CLIは私の知る限り同じコードにコンパイルされますが、実際には2つの異なる言語です。 –

+0

From https://en.wikipedia.org/wiki/Managed_Extensions_for_C%2B%2B "...これらの新しい拡張はC++/CLIに指定され、Microsoft Visual Studio 2005に含まれていました。[1] Managed C++という用語と拡張このように非難され、新しい拡張によって置き換えられています.... " - だから、あなたは絶対に正しいです。 – cwap

+0

Managed C++はハンドル(管理されたポインタ、 'type ^'として宣言されています)を使用していないが、C++/CLIはハンドルを使用しているので、 ...私はそれについて考えるようになったので、質問をした人は、2つが混ざってしまった。 –

1

.Netのコレクションクラスを使用します。 exampleの場合:

List<String^>^ dinosaurs = gcnew List<String^>();