新しく質問する

int *a = new int; エラー

役に立った:5件
  • 質問者:donaji
  • 投稿日時:2008/08/08 21:48
  • 困り度:困ってます
  • 友達に紹介
  • ブログに書く
  • 教えて!gooお気に入り

下記をコンパイルすると、'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;

}

この質問への回答は締め切られました。
このQ&Aは役に立ちましたか?(役に立った:5件)
  • 参考になった:0件
  • 回答者:pick52
  • 回答日時:2008/08/10 02:01

そもそも、変数aをポインタ(int*)型にする意味がないんじゃ...。

int a = rand();
cout<<a<<endl;

で十分ですよね(多分)。

通報する

  • 参考になった:1件
  • 回答者:aigaion
  • 回答日時:2008/08/08 22:20

直すべきところは他の回答者さんが指摘されているので理由の方を書いておきますね.

a=rand();

コンパイラがエラーをはいているのはこの部分です.

aはint *型変数です,これにたいしてrand()の返り値の型はint型です.
c++言語の暗黙の型変換では,int型からint *型変数には型変換(キャスト)できないので
コンパイラはエラーをはいているわけです.

よくあるミスです.
代入を行うときは,左辺値(ここではa)の型が何であるかと
右辺の式の評価値が何型であるかを意識して書くと良いと思いますよ.

通報する

この回答へのお礼

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

  • 参考になった:0件
  • 回答者:koko_u_
  • 回答日時:2008/08/08 22:05

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

通報する

  • 参考になった:0件

No.1ベストアンサー20pt

#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;
}

/*
多分こうだと思う。
想像以上に乱数の精度が悪いような気がする。
*/

通報する

この回答への補足

質問者です。

>int *a = new int;
>a=rand();

int *a = new int;
*a = rand();
にしたら解決できました。 初心者なのでnewとはなんたるかを
いろいろ試している最中です。 

なぜこうなるのか、ご存知でしたら教えてください。

  
このQ&Aは役に立ちましたか?(役に立った:5件)

このページのトップへ

Facebook公式ページ

公式Twitter