プロが教える店舗&オフィスのセキュリティ対策術

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

}

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

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

この回答への補足

質問者です。

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

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

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

補足日時:2008/08/08 22:13
    • good
    • 0

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



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

で十分ですよね(多分)。
    • good
    • 0

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



a=rand();

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

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

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

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

お礼日時:2008/08/08 22:28

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

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!