前提・実現したいこと
c++03(古いのを買ってしまっため)の独習c++という本で
コピーコンストラクタのところをやっているのですが
そこの例のソースコードをvisual studio 2019で
実行したところエラーが出てきてしまいました。
発生している問題・エラーメッセージ
①array(←クラス名)があいまいです(コピーコンストラクタのクラス名のところ) ②オーバーロードされた関数"size"のどのインスタンスが対象であるかを特定できません。(コピーコンストラクタの中身) ③識別子"p"が定義されません。(コピーコンストラクタの中身) ④'array'はあいまいなシンボルです。(main関数でのarrayで宣言したところ)
おそらく②と③は①が原因だとは思っているのですが...
該当のソースコード
c++
1/* このプログラムでは「安全な」配列クラスを作成する 2 配列を記憶する領域を動的に割り当てるので、 3 配列オブジェクトを使用してほかの配列オブジェクトを 4 初期化する際に、コピーコンストラクタを使用して 5 メモリを割り当てる 6*/ 7#include <iostream> 8#include <cstdlib> 9using namespace std; 10 11class array { 12 int* p; 13 int size; 14public: 15 array(int sz) { // コンストラクタ 16 p = new int[sz]; 17 if (!p) exit(1); 18 size = sz; 19 cout << "「通常の」コンストラクタを使う\n"; 20 } 21 ~array() { delete[] p; } 22 23 // コピーコンストラクタ 24 array(const array& a); 25 26 void put(int i, int j) { 27 if (i >= 0 && i < size) p[i] = j; 28 } 29 int get(int i) { 30 return p[i]; 31 } 32}; 33 34/* コピーコンストラクタ 35 36 このコンストラクタでは、コピー用にメモリを割り当て、 37 このメモリのアドレスをpに割り当てる 38 したがって、pが元のオブジェクトと同じ動的割り当てメモリを 39 参照することはない 40*/ 41array::array(const array& a) { 42 int i; 43 44 size = a.size; 45 p = new int[a.size]; // コピー用のメモリを割り当てる 46 if (!p) exit(1); 47 for (i = 0; i < a.size; i++) p[i] = a.p[i]; // 内容をコピーする 48 cout << "コピーコンストラクタを使う\n"; 49} 50 51int main() 52{ 53 array num(10); // 「通常の」コンストラクタを呼び出す 54 int i; 55 56 // 配列に値を格納する 57 for (i = 0; i < 10; i++) num.put(i, i); 58 59 // numの内容を表示する 60 for (i = 9; i >= 0; i--) cout << num.get(i); 61 cout << "\n"; 62 63 // ほかの配列を作成し、numを使用して初期化する 64 array x = num; // コピーコンストラクタを呼び出す 65 66 // xを表示する 67 for (i = 0; i < 10; i++) cout << x.get(i); 68 cout << "\n"; 69 70 return 0; 71}
試したこと
コピーコンストラクタをインライン関数のようにしましたが、案の定main関数でエラーが残りました。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/17 04:37
2020/03/17 04:40
2020/03/17 05:01