キャストしようとしていないのにエラーが出る!?

このQ&Aのポイント
  • 大学でプログラミングの授業を受けている初心者です。
  • C++のプログラムで作成している関数の一部で'int'型を'ratl'型に変換できないというエラーが出ます。
  • しかし、特に変換しようとする動作は書かれておらず、困惑しています。助けてください!
回答を見る
  • ベストアンサー

キャストしようとしていないのにエラーが出る!?

大学でプログラミングの授業をとっているものです。 初心者でして、理解できないエラーが出てしまって困っています。 C++において、 作成している、プログラムの関数の一つで、 Mat MatIn(Mat M) { int i,j,k; cout << "行列の入力\n"; cout << "行の数?"; cin >> M.size[0]; cout << "列の数?"; cin >> M.size[1]; for(i=0;i<M.size[0];i++){ for(j=0;j<M.size[1];j++){ cout << '(' << i+1 << ',' << j+1 << ")="; ★cin >> M.seibun[i][j]=;★ } } return M; } ★で囲んだ部分に、 'int' 型は 'ratl' 型に変換できない(関数 MatIn(Mat) )というエラーが出てしまいます。 なお、ratlおよびMatは授業内で作成した、複合体(?)です。 特に変換しようとするような動作は書いていないですし、 まず、M.seibunはratl型ではなく、Mat型のはずで… どんどんわからなくなってしまいました!笑 どなたか、助けてください!

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「まず、M.seibunはratl型ではなく、Mat型のはずで…」というのは完全に何かを勘違いしている. M が Mat型ならそのメンバである M.seibun が Mat型のはずがない. とりあえずその「Mat型」や「ratl型」がどのように定義されているのかを見せてほしい.

その他の回答 (2)

  • dido123
  • ベストアンサー率34% (11/32)
回答No.3

Mat型を定義している部分(構造体・クラス)を提示していただけないと答えようがないと思います。 あと、オペレーター部分もついでに提示して!

zepher0219
質問者

お礼

解決しました! ありがとうございました!

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.2

★で囲んだここ、 cin >> M.seibun[i][j]=; 本当にこう書いてるんですか? =(イコール)のところで別のコンパイルエラーが出そうな気がするんですけどね。

zepher0219
質問者

お礼

解決しました! ありがとうございました!

関連するQ&A

  • C++の無限ループを解決してください

    アルゴリズムを勉強するときに以下のソースを書きました; void weighted_quick_union_algorithm() { static const int volume = 10; enum status { terminate_, union_, find_ }; string str; status sta; vector<int> system(volume, 0); vector<int> size(volume, 1); for (int index = 0; index != volume; ++index) { system[index] = index; } do { cout<<"cin"<<endl; cin >> str; for (string::size_type index = 0; index != str.size(); ++index) str[index] = toupper(str[index]); if (str == "UNION") sta = union_; else if (str == "FIND") sta = find_; else if (str == "TERMINATE") sta = terminate_; switch (sta) { case(0): { cout << str << endl; break; } case(1): { cout << str << sta << endl; int p(0), q(0), i(0), j(0); while (cin >> p) { cin >> q; for (i = p; i != system[i]; i = system[i]); for (j = q; j != system[j]; j = system[j]); if (i == j) continue; if (size[i] < size[j]) { system[i] = j; size[j] += size[i]; } else { system[j] = i; size[i] += size[j]; } cout << p << " - " << q << endl; } cout<<"break"<<endl; break; } case(2): { cout << str << sta << endl; break; } } } while (sta); } しかし unionを入力しあと ; でwhile(cin>>p)をブレイクしたら cin break UNION1 cin break Union1 で無限ループ 結構時間かかったが間違いがわかりません ちなみに最少は while(cin>>p>>q)と書いていましたが同じ結果です。 どうかお願いします

  • C言語/プログラミング

    int Sutar(int i, int j) { for (i = 1; i <= 5; i++) { for (j = 0; j < i; j++) { cout << "★¥n"; } cout << "¥n"; } return i, j; } int main() { int i; cout << "★を何個出力しますか?¥n"; cin >> i; cout << "★を" << Sutar(i, j) << "個出力に成功しました。¥n"; return 0; } これで、実行したらエラー発生しました。エラーを治す方法を教えてください。

  • C++ ソートのやり方

    僕が作ったプログラムで、これはバブルソートなのかわからないので教えてください。 また、ほかのソートの仕方も教えてください。 よろしくお願いします。 汎用関数を使っているのでわかりにくいかもしれないですがお願いします。 #include <iostream> using namespace std; template <class X>void Sort(X *data, int size) { X temp; for (int i = 0; i < size; i++){ for (int j = i + 1; j < size; j++){ if (data[i]>data[j]){ temp = data[i]; data[i] = data[j]; data[j] = temp; } } } } int main() { int i[10]{1, 4, 3, 5, 2, 10, 2, 7, 6, 8}; char c[10]{'c', 'b', 'z', 'a', 'x', 'y', 'j', 'n', 'm', 'r'}; Sort(c, 10); Sort(i, 10); for (int j = 0; j < 10; j++){ cout << i[j] << ' '; } cout << endl; for (int j = 0; j < 10; j++){ cout << c[j] << ' '; } cout << endl; getchar(); return 0; }

  • 添字範囲エラー送出とデストラクタについて

    添字範囲エラー送出とデストラクタについて 下記のように(1)SiZE=5,(2)num=6 を投入した場合、添字演算子[]関数で(3)添字範囲エラー送出(size=5,I=5)の時、 IdxRngErr例外を発生し、(4)デストラクタを呼んでcatch((5)catch (IntArray::IdxRngErr&)で捕捉される。 質問 IdxRngErr例外を発生により、デストラクタを呼ばれる理由を教えて頂きたい。 *********************************************************************************** main() { int size, num; cout << "要素数:"; cin >> size;   (1) 5を投入 cout << "データ数:"; cin >> num; 、 (2) 6を投入 f(size, num); return 0; }/ *************************************************************************************** //===== 整数配列クラス ======// class IntArray { int size; // 配列の要素数 int* vec; // 先頭要素へのポインタ ~IntArray() { delete[] vec; } // (4)デストラクタよりIdxRngErrがcatch(5)される。 int& operator[](int i) { // 添字演算子[] if (i < 0 || i >= size) throw IdxRngErr(this, i); (3)// 添字範囲エラー送出(size=5,I=5)の時, return vec[i]; } ******************************************************************************************* / //--- 要素数sizeの配列にnum個のデータを代入して表示 --// void f(int size, int num) { try { IntArray x(size); for (int i = 0; i < num; i++) { x[i] = i; cout << "x[" << i << "] = " << x[i] << '\n'; } }    (5)catch (IntArray::IdxRngErr& x) { cout << "添字オーバフロー:" << x.Index() << '\n'; return; i

  • c++ で *の逆三角旗を作りたいです

    普通の三角旗はできましたが逆三角旗が分かりません 例えば3と入力したら * ** *** ** * こんな感じで出力させたいのですが考え方が分かりません 普通の方のコードはこんな感じです int i, j; cin>>num; for (i = 1;i <= num;++i) { for (j=1;j<=i;j++) { cout << "*"; } cout << endl; } for (i = 1;i <= num-1 ;i++) { for (j=1;j<=num-i;j++) { cout << "*"; } cout << endl; } cout << endl;

  • STLのvectorで・・・

    4次元配列を使いたいので以下のようなプログラムを組んでみました。 -------------------------------------------------- #pragma warning( disable : 4786 ) #include <vector> #include <iostream> using namespace std; void EditYMatrix(vector< vector< vector<int> > > *vi, int i); void EditSquareMatrix(vector< vector<int> > *vi, int i); int main(int argc, char* argv[]) { int i, j, c; vector< vector< vector< vector<int> > > > vi; cout << "Xの要素数を入力してください" << endl; cin >> c; vi.resize(c); cout << "Yの要素数を入力してください" << endl; cin >> c; for(i=0 ; i<vi.size() ; i++) EditYMatrix(&vi[i], c); cout << "Zとωの入力" << endl; for(i=0; i<vi.size() ; i++){ for(j=0; j<vi[i].size() ; j++){ cout << i << "," << j << "番目の自由度を入力してください" << endl; cin >> c; EditSquareMatrix(&vi[i][j], c); } } return 0; } void EditYMatrix(vector< vector< vector<int> > > *vi, int i) { vi->resize(i); } void EditSquareMatrix(vector< vector<int> > *vi, int i) { vi->resize(i); for(int j=0; j<i ; j++) vi[j].resize(i); } -------------------------------------------------- Y,Z,ωは可変で、Zとωは同じにするので、 ためしにこのようなプログラムを組んでみました。 ですが、実行途中でエラーが起きてしまいます。 /* verify block type */ _ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)); という部分でエラーが起きているのですが 知識不足で、どのような内容なのかわかりません。 どなたか分かる方教えてください。 OS:Win2000 VC++6.0

  • n進数を10進数に変換するプログラムがわかりません

    整数n(2<=n<=16)とn進数の数字列digitsを与えると10進数に変換して表示するプログラム 関数void base2dec(int n, string digits, int &dec)を使用する 実行例 110101(2)=53 123(8)=83 7ACE(16)=31438 以下はとりあえずつくったみたプログラムです #include<iostream> #include<string> using namespace std; void base2dec(int n, string digits, int &dec) { int i,x=0; for(i=0; i=digits.size()-1; i++) { if(n<10) { x=digits[i]-'0'; } else { x=digits[i]-'A'+10; } dec=(x*n); if(cin >> digits[i++]) { if(n<10) { dec=dec+(digits[i++]-'0'); } else { dec=dec+(digits[i++]-'A'+10); } } } int value = dec; } int main() { int n,value; string digits; cout << "何進数ですか-->"; cin >>n; cout << "数字列を入力してください-->"; cin >>digits;; base2dec(n,digits,value); cout << digits << "(" << n << ")=" << value << endl; return 0; } void関数の中、特に計算方法が間違っていると思うのですが、なにがいけないかわかりません。ちなみにn進数から10進数に直す方法は理解しています。

  • 配列のプログラムですが

    #include <iostream> using namespace std; int main() { int a[100],b=-9999; int i=0,j; do { cout << "整数値を入力してください\n"; cin >> a[i]; b += a[i]; i++; }while( a[i-1] != 9999); cout << b << '\n'; for(j=0;j<i-1;j=j+1) cout << a[j] * 3 << '\n'; return 0; } このプログラムってどんな計算をしてるんですか?誰か分かる人いますか 整数値を入れてくださいって出るだけなんですが

  • 4つの異なる二次配列を関数で表示

    二次配列と関数の問題です。 [日本語訳]displayArray7を呼ぶ関数を書きなさい。その関数は二次配列を一つの引数として受け取り、その内容を画面に表示すべきである。その関数は下のいずれの配列でも動作するようにしなさい。プログラムを書いてその関数を評価しなさい。 4つの配列とも一次の項(?)の数が違うじゃないですか。しかも関数を呼ぶときは配列[5][7]などはいらないですよね? (displayArray7(hours);だけ) だから、各配列の一次の項がどんな数字を持っているのかを関数displayArray7に送ることが出来ず、どのように表示してよいのか分かりません(今は一応最大値50で表示しています)。どのようにすればよいのでしょうか? 教えてください。お願いします。 #include <iostream> using namespace std; void initialize(int array[][7]); void displayArray7(int array[][7]); int main() { int hours[5][7]; int stamps[8][7]; int autos[12][7]; int cats[50][7]; initialize(hours); displayArray7(hours); initialize(stamps); displayArray7(stamps); initialize(autos); displayArray7(autos); initialize(cats); displayArray7(cats); return 0; } void initialize(int array[50][7]) { int i, j; for(i=0; i<50; i++) for(j=0; j<7; j++) array[i][j] = 0; } void displayArray7(int array[][7]) { int i, j; cout << "\t1\t2\t3\t4\t5\t6\t7" << endl << endl; for(i=0; i<50; i++){ cout << i+1 << ":"; for(j=0; j<7; j++){ cout << "\t" << array[i][j]; } cout << endl << endl; } }

  • C++ 構造体型のvector配列でエラーがでます

    構造体のvector配列を関数に渡しています。 以下のソースコードで、3点エラーがでます どのように変更すればよいですか? #include<stdio.h> #include<stdlib.h> #include<iostream> #include <vector> using namespace std; std::vector<int> v; typedef struct fukusosu{ int a; int b; }FUKUSOSU; int sort(vector<FUKUSOSU> v[], int N){ FUKUSOSU tmp; int j; for(int i = 0 ; i < N - 1 ; i++){ j = i ; for(int k = i + 1 ; k < N ; k++){ if(v[j].a > v[k].a){j = k;}//ここのaに対して、エラーがでます } tmp = v[j];//ここのイコールに対して、エラーがでます v[j] = v[i]; v[i] = tmp;//ここのイコールに対してエラーがでます } } int main(void){ int N; // 要素数 cin >> N; vector<FUKUSOSU> v(N); for(int i = 0; i < N; ++i){ cin >> v[i].a; cin >> v[i].b; } }

専門家に質問してみよう