Visual C++2010 ExpressでのToString()メソッドについて

このQ&Aのポイント
  • Visual C++2010 ExpressでのToString()メソッドについての説明と、ビルドエラーの原因について解説
  • ポインタの学習に関する講座で、(*a).ToString()というコードの意味や記述方法についての疑問
  • クラス、構造体、共用体に関する(*)の使い方と、ToString()メソッドへのアクセス方法についての解説
回答を見る
  • ベストアンサー

Visual C++2010 Express

Visual C++2010 Express でのToString()メソッドについて教えて下さい。 私、Microsoft提供の、Visual C++2010 Expressを利用し、勉強を始めたばかりの超ビギナーです。インターネットで探したある「講座」の「ポインタの学習」で、前後は省略しますが、下記コーディングがありました。   //変数の宣言   int b; //ポインタの宣言   int* a; //ポインタの初期化   a=&b; //内容代入   b=5; label1->Text=(*a).ToString(); 私、コードエディターに入力するときに、(*a)を間違って、*aと入力してしまいました。結果はビルド失敗で、エラーメッセージは、「Form1.h(113):error C2228: ‘ToString’の左側はクラス、構造体、共用体でなければなりません。型は‘int *’です。」とありました。その「講座」には(*a).ToString();については、なぜその様に記述するのか、何の説明もありません。エラーメッセージから*aはクラス、構造体、共用体ではないからということになるのでしょうが、( )を付けるとクラス、構造体、共用体のどれかになるということなのですか?(そういう決まりのなっているのですか?)又、ポインタからToString()メッソッドにアクセスする場合には、全て(*a)のように、( )を付けると解釈しておいて良いのですか? 何方か、初心者にも解りやすくご教授頂ければ、幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.3

なるほど、やはりそのサイトでしたか。 「初心者のための世界で一番わかりやすいVC++ (C++) 入門基礎講座」の内容は実際には(2)だけでなく(3)の内容も含んでいます。 それとフォームアプリの構築方法自体がC++/CLIの.NETライブラリを使ったものになっていますので純粋なC++では無いことはご理解下さい。これが通用しないC++の世界が沢山あります。 ご質問の件のToString();メソッドは、C++/CLIのメソッドですのでそちらを勉強されれば理解できると思います。それと今回の問題は.を使ったメンバ参照と*では.のほうが優先順位が高いために起こったエラーです。 つまり、*a.ToString();は*(a.ToString());と同じ意味になります。ポインタに.を付ける文法は存在しないしませんので->じゃないからエラーと解釈されたって事ですね。 純粋なC++の学習ならこちらをどうぞ。 「ロベールのC++教室」 http://www7b.biglobe.ne.jp/~robe/cpphtml/ VisualC++自体にもC++/CLI以外に純粋なC++は搭載されていますので、プロジェクト作成時にWin32コンソールアプリ等を選べば純粋なC++アプリを作成できます。

yu28ka14
質問者

お礼

再度の回答を、有難うございました。大変解りやすい説明で感謝致します。 今後もお世話になる事があると思います。その節は宜しくお願い致します。

その他の回答 (2)

  • siffon9
  • ベストアンサー率64% (136/211)
回答No.2

1+2*3を計算するときは、2*3から先に計算しますよね。 じゃあ1+2を先に計算したい場合はどう書くかというと(1+2)*3と括弧で囲んで優先して計算するように書きます。 それと同じことだと思います。 aはポインタ変数でクラス、構造体、共用体ではありませんよね。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.1

サイトをどこか明かしてくれた方が良いと思います。 学習しているのは (1)C言語 (2)C++ (3)C++/CLI のどれのつもりなだろうってのも気になる所。 純粋なC言語のつもりなら、そこのサイトは止めておきなさいって感じ。 C++/CLIでわざわざポインタを勉強する意味もわからない。 「【C++/CLI】数値の書式(フォーマット)指定文字列 画像処理ソリューション」 http://imagingsolution.blog107.fc2.com/blog-entry-118.html

yu28ka14
質問者

補足

説明が足らず、申し訳有りません。サイトは「初心者のための世界で一番わかりやすいVC++ (C++) 入門基礎講座」で「HP管理人 栃木県立那須拓陽高等学校教諭 佐藤 勝一」とありました。Microsoft提供のVisualC++2010 Expressを使った講座で、その中の「第6講 ポインタの学習」からの質問となりました。学習しているにはC++です。

関連するQ&A

  • visual C++でのグローバル変数の宣言

    visual C++でマスの色を読みとって、いろいろな処理を行うプログラムを作成中なのですが、グローバル変数として以下の宣言をしたときに、以下のエラーが出ます。 struct{ int r; int g; int b; }rgb[10][10]; //マス数は10×10までとする error C3183: マネージ型 'SOMsample::Form1' の中で名前のないクラス、構造体またはユニオンを定義することはできません。 これをbuilder5で書き込んだときはエラーが出なかったのですが、visual C++ではどう書けばいいのでしょうか? 回答よろしくお願いします。

  • .NET C++で、構造体の配列をnewで作成しようとするとerror C2440のエラーとなってしまいます

    Visual studio2003 .NET C++で、構造体の配列を作成し、 改めて構造体の配列をサイズ指定して作成しようとすると、error C2440が出てしまいます。 ポインターで宣言したつもりはないのですが、ポインターから配列に変換できないといった項目のエラーなので、 なぜこのようなエラーが出るのかわからずにおります。 typedef __nogc struct TEST { // 省略 }; TEST struct_test __nogc[]; int int_num = 10; struct_test = new TEST __nogc[int_num]; // error C2440: '=' : 'TEST *' から 'TEST []' に変換できません。 ご指摘等ありましたらご回答いただけますと助かります。 よろしくお願いいたします。

  • C言語の構造体について

    構造体を勉強している所なのですが変数をまとめられるのは分かりましたがどのサイトを見てもいまいち使い所がわかりません。 struct test { int a; int b; int c; }testtest; testtest.a = 0; testtest.b = 1; testtest.c = 2; 例えば上記のような構造体を作成するとします。 私の見たサイトでは構造体で宣言はまとめられても初期化する事はできないと書いてありました。 下記のように変数を普通に宣言&初期化するよりも手間がかかってしまっていると思うのですが私の考えが及ばない何か別の使い方または処理が早くなったりする事があるのでしょうか?。 int a = 0; int b = 1; int c = 2;

  • Visual C++でのデバッグ

    配列で宣言した構造体のオブジェクト中のひとつのメンバーをデバッグウィンドウのウォッチで見れないでしょうか。 たとえば struct test {   int a;   double b; }sample[10]; と宣言したとして、sample[0].a~sample[9].aのみをウォッチで見たいです。 実際にやってみたのですが、ウォッチにsampleを入れてしまうとaも表示されてしまいます。

  • Microsoft Visual C++ 2010

    private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { String^str1; int str1_a; int str1_b; int str1_c; int str1_d; int str1_e; int str1_f; str1 = textBox1->Text; if(str1.Length <= 6){ str1_a = str1.slice(0,1); str1_b = str1.slice(1,2); str1_c = str1.slice(2,3); str1_d = str1.slice(3,4); str1_e = str1.slice(4,5); str1_f = str1.slice(5,6); }else{ str1_a = str1.slice(1,2); str1_b = str1.slice(2,3); str1_c = str1.slice(3,4); str1_d = str1.slice(4,5); str1_e = str1.slice(5,6); str1_f = str1.slice(6,7); } } 上のようにしてみたのですが、こんなエラーがたくさん出てしまいました。 '.slice' の左側はクラス、構造体、共用体でなければなりません どうすればいいでしょうか。 textBox1には6文字または7文字の英数字が入り、 xxxxxx または yxxxxxx xを1文字づつ変数に入れたいんです。 よろしくお願いします。

  • Visual C++ 2010 Expressについて。

    Visual C++ 2010 Expressについて。 Visual C++ 2010 Expressを使っているのですが、 プロジェクトを開いて1回目ビルドすると必ずエラーが出ます。 ビルドした後1回閉じて開き直してビルドすると正常にビルドできます。 エラー内容 C:\(省略)\ファイル名.vcxproj : error MSB4014: 内部エラーのため、ビルドは予期せず停止しました。 C:\(省略)\ファイル名.vcxproj : error MSB4014: Microsoft.Build.Exceptions.BuildAbortedException: ビルドが取り消されました。MSBuild.exe は、場所 "C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" に見つからなかったため、子ノードとして起動できませんでした。必要に応じて、BuildParameters または MSBUILD_EXE_PATH 環境変数で正しい場所を指定してください。 と出ます。 原因を色々調べてみたのですが分かりませんでした。 かもしれないということでもいいので答えて頂けると助かります。 環境 XP SP3 Visual Studio 2005が入っています。 ちなみに、2005は正常に出来ます。

  • Visual C# 2008 Express ・・ unsafeコードがうまくいかない

    Visual C# 2008 Expressを使っているのですが・・・ unsafeコードを書こうとするとうまくいきません。 ポインタの使い方でエラーになる等というより、 明らかに動作がおかしいです。 例えば・・・ 「新しいプロジェクト」で 「Windowsフォームアプリケーション」を選んで、 まっさらなウィンドウだけ出すアプリを作り、 (勿論、ポインタ操作なんてどこにもない) プロジェクトのプロパティで、 「ビルド」→「アンセーフコードの許可」をONにして、 リビルドすると・・・ デバッガ上では動作する(ウィンドウがでるだけ)のですが、 デバッグなしで実行をすると、ウィンドウも出ずに、 アプリケーションエラーになってしまいます。 何が問題なのでしょうか??

  • Visual C++ 2008 Express Edition

    Visual C++ 2008 Express Editionをダウンロードしたのですが、使い方が全く分かりません。C言語を学習しています。 例えば #include <stdio.h> int main(void) { printf("Hello, World!\n"); return 0; } というようなプログラミングを実行するにはどうすればいいでしょうか

  • visual c# グローバル変数について

    visual C#でどのクラスからも使える変数(グローバル変数)を宣言するにはどうすれば良いですか?

  • Visual C++ Express Edition 警告に関して

    Visual C++ Express Editionを導入して最近Cを学び始めたのですが、 Visual C++ Express Editionでコンパイルした際に警告がたくさん でてしまいます。エラーさえなければ実行はできるようですが、できれば警告もなくしないです。以下がソースファイルです。 #include <stdio.h> int main(void) { int x,y,z; z=1; for(;z == 1;){ printf("数値を入力してください:\n"); scanf("%d",&x); printf("数値を入力してください:\n"); scanf("%d",&y); printf("加算すると%d\n減算すると%d\n" "乗算すると%d\n除算すると商%dは余りは%d\n",x+y,x-y,x*y,x/y,x%y); printf("計算を続けますか?\n続けなるならば1を押してください:"); scanf("%d",&z); } return(0); } コンパイルをすると警告として以下がでました。 c:\program files\microsoft visual studio 8\vc\include\stdio.h(295) : 'scanf' の宣言を確認してください。 今回の例の場合の警告の解決方法と一般的に警告をどのように解決をすればいいのか(エラーだったら文法的に間違えているのだが、警告だと?)教えてください。