- ベストアンサー
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; }
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#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; } /* 多分こうだと思う。 想像以上に乱数の精度が悪いような気がする。 */
その他の回答 (3)
- pick52
- ベストアンサー率35% (166/466)
そもそも、変数aをポインタ(int*)型にする意味がないんじゃ...。 int a = rand(); cout<<a<<endl; で十分ですよね(多分)。
- aigaion
- ベストアンサー率47% (287/608)
直すべきところは他の回答者さんが指摘されているので理由の方を書いておきますね. a=rand(); コンパイラがエラーをはいているのはこの部分です. aはint *型変数です,これにたいしてrand()の返り値の型はint型です. c++言語の暗黙の型変換では,int型からint *型変数には型変換(キャスト)できないので コンパイラはエラーをはいているわけです. よくあるミスです. 代入を行うときは,左辺値(ここではa)の型が何であるかと 右辺の式の評価値が何型であるかを意識して書くと良いと思いますよ.
お礼
良くわかりました。ありがとうございます。
- koko_u_
- ベストアンサー率18% (459/2509)
いやいやポインタ変数を宣言する必要など何処にもないから。
補足
質問者です。 >int *a = new int; >a=rand(); を int *a = new int; *a = rand(); にしたら解決できました。 初心者なのでnewとはなんたるかを いろいろ試している最中です。 なぜこうなるのか、ご存知でしたら教えてください。