我一直在處理一個處理電話目錄的項目。我的程序從數據表中讀取數據並創建一系列電話。創建和訪問類對象的動態數組
我有2個課程:軟電話和車隊。
Softphone包含電話(私人)的所有值以及獲取/設置和打印功能以訪問它們(公共)。
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(Short,Self Contained,Correct Example)](http://sscce.org)**你的問題 – NathanOliver
這是另一個「我可以'使用'std :: vector'「要求?如果沒有,'std :: vector電話;'和溝指針。另外,你的'softphone'類不需要用戶定義的拷貝構造函數或析構函數 - 編譯器的默認版本可以很好地工作。 –
PaulMcKenzie