• 締切済み

C++.NET の String型の使い方

初めて質問いたします。 C++ .NET 2005 Express Beta版を入手し、Windows Formsのプログラミングを勉強してます。 TextBoxのTextに値を変数で指定したいのですがどうすれば良いのかわかりません。   textBox1->Text = "Test"; とダイレクトに値を指定すればできるのですが、   #include <string>   using namespace std;    (省略)   string str = "Test";   textBox1->Text = str; は、エラーになってしまいます。 C++標準のstringクラスではなく、.NETはStringクラスがあるようですが、これの使い方がMSDN等で調べているのですが分かりません。 分かりやすいURLなどありましたら教えていただけませんか。

みんなの回答

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

>C++ .NET 2005 のベータ版だからなのでしょうか。 私は、.NET2003を使っているので 2005についてはわかりません、すみません。 でも、 2003でできることが、 2005でなぜできないのか興味がありますので よろしかったら、エラーメッセージの部分を補足であげてくれませんか?

hi_tag
質問者

補足

new を使ったときの Build Log の Output Window のところです。 Compiling... Form1.cpp e:\Documents and Settings\hi_tag\My Documents\Visual Studio\Projects\Test004\Test004\Form1.h(101) : error C2750: 'System::String' : cannot use 'new' on the reference type; use 'gcnew' instead e:\Documents and Settings\hi_tag\My Documents\Visual Studio\Projects\Test004\Test004\Form1.h(101) : error C2664: 'System::Windows::Forms::TextBox::set_Text' : cannot convert parameter 1 from 'System::String *' to 'System::String ^' No user-defined-conversion operator available, or Cannot convert an unmanaged type to a managed type

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

#1>試してみましたがダメでした。 #include <string>   using namespace std;   string str = "Test";   textBox1->Text = new String(str.c_str()); ウチで試してみた所、問題なく実行できました。 そちらで、なぜ、エラーになるのかはわかりません。 何か勘違いされているのではないかと思います。 >Stringを使うために、 フォームアプリケーションを作成するプロジェクトの時点で、自動的に using namespace System; されているので、他には、何もする必要はありません。 S"文字列" は、C++.NETでの拡張的な文字列リテラルの書き方で new String("文字列"); と同等です。つまり、自動的にStringオブジェクトを作っているのと同じです。 リテラルにすると、newする場合と違うのは、同じ領域が使われるということが違います。(効率が良い) gcnewについては、私の環境では、エラーになりました。よくわかりません。

hi_tag
質問者

お礼

回答ありがとうございます。 newでエラーになるのは、恐らく C++ .NET 2005 のベータ版だからなのでしょうか。 C++ .NET 2005 のベータ版が無料でダウンロードできるので、これを使っています。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

textBox1->Text = new String(str.c_str()); でいけるんじゃないかなあ。 試してないのでなんですが、 C++のstringクラスからは、c_str()で、いわゆるNULL終端文字列へのポインタが得られて .NETのStringクラスは、NULL終端文字列でのコンストラクタがありますから。

hi_tag
質問者

補足

早速の回答ありがとうございます。 試してみましたがダメでした。 英語で分かりにくい、エラーメッセージを見てみたらgcnewという単語があったので、 textBox1->Text = gcnew String(str.c_str()); としてみたら出来ました。(^^) gcnewついては後で調べて見ますが、そもそもStringが分かりません。 String str; を追加するだけではエラーになってしまいます。 MSNDのサンプルをまねて String* str = S"Test"; としてもエラーとなります。 Stringを使うために、 (1)#using <mscorlib.dll> が必要でしょうか? (2)using namespace System::Text; が必要でしょうか? (3)Command Line オプションの追加が必要でしょうか? また、String* str = S"Test"; の S は何ですか? 初歩的な審問ばかりですみません。 ネットで調べてはいるのですが、なかなか分かりません。