私は電話ディレクトリを扱うプロジェクトに取り組んできました。私のプログラムは、データシートからデータを読み込み、電話機の配列を作成します。クラスオブジェクトの動的配列の作成とアクセス
私は2つのクラスを持っています:ソフトフォンとフリート。
Softphoneには、電話機(プライベート)のすべての値と、それらにアクセスするためのget/setおよびprint関数(public)が含まれています。
class softphone {
public:
string name;
//All my other variables
public:
softphone();
softphone(const softphone &obj);
~softphone();
//Get functions
string get_name();
//ect
//Set functions
void set_name(string);
//ect
//Print functions
void print_name();
//ect
}
艦隊は艦隊クラスは、ソフトフォンへのポインタを持っていると私は、動的に携帯電話の配列を作成するためにそれを使用
class fleet {
private:
//Some variables and buffers
softphone* phone; ->This is the array containing all the phones
public:
//Read file and create array functions
//Functions
void print_fleet();
//More output functions
};
との電話や出力操作機能の配列が含まれています。ファイルからディレクトリを読み込んで配列を作成します。 (私は、実行時の前にどのように多くの携帯電話を知りません。)
が、それはファイルの行数をカウントし、すべてのデータを保持するのに十分な大きさの配列を作成して:
phone = new softphone[number_of_lines - 1]; //Line 1 is header
それからの読み取りをファイルを作成し、設定した関数でデータを保存してから、ポインタをインクリメントします。 phone ++;
これまでのところとても良いです。今私はこれらの電話にアクセスし、メンバー機能を呼びたい場合。
phone[0].print_name();
コンパイラは私にエラーを与えていないが、出力はゴミである(画面上の無限のランダムな文字。)私は、メモリ位置例外ではstd :: bad_allocを取得します。
for(int i = 0; i < (number_of_lines - 1); i++){
phone--
}
phone->print_name();
これで機能します。このようにして私はすべての電話にアクセスし、それらを素早く印刷することができます。すべてのデータがそこにあります。しかし、ポインタを増減する必要があり、インデックス番号で作業することはできません。
インデックス番号はどのように使用できますか?そして、なぜ私はそれを使用してコンピュータが夢中になるが、私は増加するといいですか?
回答ありがとうございました
[編集] ** [mcve]または[SSCCE(ショート、自己完結型、正しい例)](http://sscce.org) – NathanOliver
あなたの質問は別のものになりますか? 'std :: vector'を使う必要はありませんか?そうでなければ、 'std :: vector phone;'とポインタを捨てます。また、 'softphone'クラスはユーザ定義のコピーコンストラクタやデストラクタを必要としません。コンパイラのデフォルトバージョンは完全にうまく動作します。 –
PaulMcKenzie