• ベストアンサー

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

  • C++で乱数を重複しないように発生させる

    C++で乱数を重複しないように発生させるようにプログラムを変更しろと言われたのですが、できません。 教えていただきたいです。 #include<iostream> #include<cstdlib> #include<cstring> #include<ctime> using namespace std; int main() { int i,n; int *p; cout<<"何個記憶しますか?"<<endl; cin>>n; p=new int[n]; if(p==NULL){ cout<<"記憶域の確保に失敗しました。"<<endl; return 1; } srand((unsigned)time(NULL)); rand(); i=0; while(i<n){ p[i]=1+(int)((double)rand()/(RAND_MAX+1.0)*75); if(p[i]==p[i]) cout<<"p["<<i<<"]の値"<<p[i]<<endl; i++; } delete[] p; return 0; }

  • 2つのcppファイルから

    1つのexeファイルを作る必要性が出てきました。 (現在質問中の質問に関連しています。) 例えば file.cpp: #include<iostream> using namespace std; void Output(int x) { cout<<x<<endl; } void main(void) { for(int i=0;i<9;Output(i++)); } をコンパイルリンクすれば済むことを file1.cpp: #include<iostream> using namespace std; void Output(int x) { cout<<x<<endl; } file2.cpp: void main(void) { for(int i=0;i<9;Output(i++)); } という風に分かれているファイルをコンパイルリンクしなければならないのです。 cpp -e file.exe -c file1.cpp -c file2.cpp ではエラーになります。 どうすれば良いのでしょうか?

  • 仮想関数と継承について

    #include <iostream> using namespace std; class AAA { public: virtual aaa() { cout <<"aaa(void)"<<endl;} }; class BBB : public AAA { public: virtual aaa(int a) { cout <<"aaa(int)"<<a<<endl;} }; int main() { BBB bbb; bbb.aaa();<--これがエラーになります。 return 0; } どうして、既定クラスの引数なしのaaa()はよぶことが できないのでしょうか?

  • プログラミング言語Cとプログラミング言語C++

    プログラミング言語Cとプログラミング言語C++の違いって何ですか? あと、プログラミング言語C++についていくつか質問があります。 #include <iostream> using namespace std; void main(){ cout << "Hello world!" << endl; } このプログラムについて質問なんですが、iostreamってプログラミング言語Cで言うstdio.hのことですか? using namespace stdって何ですか? あと、 cout <<"Hello world!"って何ですか?

  • javaプログラミング

    以下のプログラムがコンバイルできません なぜでしょうか? #include<iostream> #include<cmath> using namespace std; int main() { double a, b; cout << "実数 a の値を入力してください " << endl; cin >> a; cout << "実数 b の値を入力してください " << endl; cin >> b; cout << a << " の " << b << " 乗は " << pow(a, b) << "です" << endl; return 0; }

    • ベストアンサー
    • Java
  • 配列の要素

    #include <iostream> using namespace std; int main() { int n[10] ={1,2,3,4,5,6,7,8,9,10}; int i; for(i = 0; i < 10; i++){ cout << "a[" << i << "] = " << n[i] << endl; } return 0; } ここまでは完成することはできたのですが この要素の並びをシャッフルしてランダムな順に並び変える方法がわかりません。

  • int型変数の簡潔なプログラム

    #include<iostream> using namespace std; int main(void){ int max = a; int min = a; if(a > b){ min = b; }else{ max = b; } cout << "小さい方の値は" << min << "です。\n"; cout << "大きい方の値は" << max << "です。\n"; } これの、    int max = a; int min = a; と     if(a > b){ min = b; }else{ max = b; } が解りません。 何故変数をaからbにチェンジしているのでしょうか 初心者なのでお手柔らかにお願いします。 よろしくお願いします。

  • 結果を報告しない?(void)

    #include<iostream> #include<string> using namespace std; void Aisatu(string n){ cout<<n<<"さん、こんばんわ"<<endl; } int main() { Aisatu("鈴木"); } 上のプログラムで、C++の学習書に「void」とは「この関数は結果をどこにも報告しない、ということ」と書いてありますが、私の理解では下のAisatu("鈴木");という外部の文字列を受け取りcout<<nに「報告」しているように感じられます。どうか解釈がうまくいきますようにご教授いただけないでしょうか。よろしくお願いします。

  • TextWranglerについて

    私はプログラミングを学ぼうとしていて C++をMacでTexrWranglerをつかって勉強しようとしたのですが 設定がよくわからず、 #include <iostream> using namespace std; int main() { cout << "hello" << endl; } というようにうち「RUN」をクリックするとエラー(error code 13304) がでてうまく実行ができません。 どのように設定をすればよいのでしょうか。

  • C++でどうすればcoutで表示できるのですか?

    C++についての質問です coutで表示するときに kannsuu関数の返り値を main関数とmain関数の cout << ++kannsuu(i) << endl; の部分を変更せずに kannsuu関数のみを変更して インクリメントして「2」と表示したいのですが どのようにすればいいですか? #include <iostream> using namespace std; int kannsuu(int i) {return i;} int main() { int i = 1; cout << ++kannsuu(i) << endl; return 0; }

専門家に質問してみよう