- 締切済み
VC++2005 型についてのエラー
現在VC++2005でプログラムを作成しています。 そこでテキストファイルに書かれて保存されているものをテキストボックスに表示するというものを作っています。 そして今は、ssという変数にその表示されているものを代入してあります。そこでそのssというものと7:00とテキストファイルに書かれているものを比べてみたいと考えています。 そこでstrcmpで比べてif文を作りたいのですが、下に書いたエラーで変換できませんと出てしまいます。 このような場合はどのように修正すればよいのでしょうか? 基本的な質問かもしれませんがよろしくお願いします。 「'strcmp' : 1 番目の引数を 'System::String ^' から 'const char *' に変換できません。(新しい機能 ; ヘルプを参照)」 **************************************************************** String^ ss; ss=textBox2->Lines[0]; textBox4->Text=ss; if (strcmp(ss, "7:00")==0) { MessageBox::Show("7時"); } else { MessageBox::Show("それ以外"); } ****************************************************************
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- D-Matsu
- ベストアンサー率45% (1080/2394)
> プログラム通りにやってみたところ不正と判断しかされなくなってしまったのですが という事なら外のifがfalse、つまりDateTime::TryParse()で失敗しているという事ですから、「ssの中身が時刻として認識できる文字列ではない」ってことになります。
- chie65536(@chie65535)
- ベストアンサー率44% (8802/19961)
System::Stringの文字列比較は「String.Compare()」を使う。 if (String.Compare(ss,"7:00")==0) { は試したか?
お礼
まだです。 試してみます。ありがとうござました。
- redfox63
- ベストアンサー率71% (1325/1856)
C++/CLIでやるなら .NETFrameworkに用意されているクラスを使ってプログラミングするようにしましょう 今回は時間(時刻)を比較したいのですから DateTime型を使いましょう 例 String ^ss = textBox1->Lines[0]; DateTime dt; // ssの内容が 時刻に変換可能かチェック if ( DateTime::TryParse( ss, dt ) ) { // 変換できたのなら『7:00』かどうかをチェック if ( dt == DateTime::Parse("7:00") ) { MessageBox::Show("7時"); } else { MessageBox::Show("それ以外"); } } else { // 変換できなかった場合 MessageBox::Show("時刻として不正です"); } # 行頭の字下げには全角文字の空白がありますので置換してください
補足
ご指摘ありがとうございます。 プログラム通りにやってみたところ不正と判断しかされなくなってしまったのですが、この場合は"7:00"というところが間違っているのでしょうか?
- machongola
- ベストアンサー率60% (434/720)
こんばんは。 System::String^はchar*とは全くを以って性質の違う物です。 if(ss == "7:00") で比較が出来ます。 しかし、どうしてもと言うのであるならば、 using namespace System::Runtime::InteropServices; //マーシャリングする IntPtr iptr = Marshal::StringToHGlobalAnsi(ss); if (strcmp(static_cast<const char*>(iptr.ToPointer()), "7:00")==0) { MessageBox::Show("7時"); } else { MessageBox::Show("それ以外"); } //割り当てられるので必ず開放する Marshal::FreeHGlobal(iptr); とする事も出来ます。
補足
ありがとうございます。 if(ss == "7:00")はもう試していたのですが出来ませんでした。 マーシャリングというものもエラーが出てしまいました。
VC++の経験はないですが、C言語は使えます。 その上での回答ですが。 コンパイルエラーに出ている通りです。変数の型が合わないだけです。 変数の型についてもっと知りましょう。
お礼
わかりました。 ありがとうございます。
お礼
わかりました。 ありがとうございます。