• ベストアンサー

int *a = new int; エラー

下記をコンパイルすると、'int' 型は 'int *' 型に変換できない(関数 main() ) とエラーが出てしまいました。 何がおかしいのでしょうか ? 初歩的な間違いをしていると思いますが、アドバイスお願いします。 #include<iostream> #include<stdlib> #include<ctime> using namespace std; void main(void) { int *a = new int; a=rand(); cout<<a<<endl; delete a; }

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

  • ベストアンサー
回答No.1

#include<iostream> #include<cstdlib> #include<ctime> using namespace std; int main(void) { srand ( time(NULL)); int *a = new int; *a=rand(); cout<<*a<<endl; delete a; return 0; } /* 多分こうだと思う。 想像以上に乱数の精度が悪いような気がする。 */

donaji
質問者

補足

質問者です。 >int *a = new int; >a=rand(); を int *a = new int; *a = rand(); にしたら解決できました。 初心者なのでnewとはなんたるかを いろいろ試している最中です。  なぜこうなるのか、ご存知でしたら教えてください。

その他の回答 (3)

  • pick52
  • ベストアンサー率35% (166/466)
回答No.4

そもそも、変数aをポインタ(int*)型にする意味がないんじゃ...。 int a = rand(); cout<<a<<endl; で十分ですよね(多分)。

  • aigaion
  • ベストアンサー率47% (287/608)
回答No.3

直すべきところは他の回答者さんが指摘されているので理由の方を書いておきますね. a=rand(); コンパイラがエラーをはいているのはこの部分です. aはint *型変数です,これにたいしてrand()の返り値の型はint型です. c++言語の暗黙の型変換では,int型からint *型変数には型変換(キャスト)できないので コンパイラはエラーをはいているわけです. よくあるミスです. 代入を行うときは,左辺値(ここではa)の型が何であるかと 右辺の式の評価値が何型であるかを意識して書くと良いと思いますよ.

donaji
質問者

お礼

良くわかりました。ありがとうございます。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.2

いやいやポインタ変数を宣言する必要など何処にもないから。

関連するQ&A