プロが教えるわが家の防犯対策術!

初めて質問いたします。
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などありましたら教えていただけませんか。

A 回答 (3件)

textBox1->Text = new String(str.c_str());


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

この回答への補足

早速の回答ありがとうございます。
試してみましたがダメでした。

英語で分かりにくい、エラーメッセージを見てみたら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 は何ですか?

初歩的な審問ばかりですみません。
ネットで調べてはいるのですが、なかなか分かりません。

補足日時:2004/12/12 08:35
    • good
    • 0

#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については、私の環境では、エラーになりました。よくわかりません。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

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

お礼日時:2004/12/13 05:37

>C++ .NET 2005 のベータ版だからなのでしょうか。


私は、.NET2003を使っているので
2005についてはわかりません、すみません。

でも、
2003でできることが、
2005でなぜできないのか興味がありますので
よろしかったら、エラーメッセージの部分を補足であげてくれませんか?

この回答への補足

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

補足日時:2004/12/14 05:40
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!