2016-03-19 14 views
1

Ich versuche, eine einfache Instructor-Liste zu implementieren, die ein dynamisches Array dynamischer "Instructor" -Objekte ist. Zunächst einmal bin ich nicht erlaubt, STL weder den Vektor usw. zu verwenden. Das Ziel besteht darin, ein dynamisches Instructor-Array auf einem Heap mit einem Standardwert zu starten. Wenn ein Instruktor hinzugefügt werden muss, erweitern Sie die Array-Größe bei Bedarf. Das Problem besteht darin, das Array von Instruktoren mit einer Standardgröße zu initialisieren, da die Größe des Instructor-Objekts ebenfalls dynamisch ist. Gibt es einen schönen Weg, damit umzugehen? HierDynamische Arrays von dynamischen Objekten

ist die Instructor Klasse

class Instructor{ 
private: 
    string title, firstName, lastName, telNo, roomNo, userName, eMail; 
    string courses[]; 

public: 
    Instructor(); 
    Instructor(string, string, string, string, string, string, string, string); 
    string getTitle(); 
    string getFirstName(); 
    string getLastName(); 
    string getTelNo(); 
    string getRoomNo(); 
    string getUserName(); 
    string getEMail(); 
    string getCourse(int courseIndex); 
    void setTitle(string); 
    void setFirstName(string); 
    void setLastName(string); 
    void setTelNo(string); 
    void setRoomNo(string); 
    void setUserName(string); 
    void setEMail(string); 
    void setCourse(string); 
    void print(); 
}; 

Der Teil, den ich versuche, das Array zu initialisieren:

int size = 5; 
Instructor *instructorList; 
instructorList = new Instructor[size]; 

Es wirft die Fehler: Typ eine unbekannte Größe Array enthält, ist nicht erlaubt

+0

Sie bereits das Problem gelöst, für die 'instructorList' zu beheben. Die 'Kurs'-Liste kann die gleiche Technik verwenden. –

+0

Es kompiliert und läuft perfekt in Ordnung. http://ideone.com/d7y0Qx – anukul

+0

@BoPersson Ja, das ist richtig, die Antwort bietet die gleiche Logik. Vielen Dank! –

Antwort

3

Verwenden Sie einen Zeiger zum Speichern (die Adresse) des Arrays.

Statt

string courses[]; 

Verwendung

string *courses; 

und initialisieren es wie

courses = new string[size_of_elements]; 

die Anzahl der Elemente zu erweitern, sind Sie in der

haben
  1. Weisen neues Array mit neuen Größe
  2. Kopieren Inhalt der alten Array in das neue Array
  3. zerstören nur das alte Array (Sie hier das neue Array nicht zerstören!)
  4. die Adresse des neuen Arrays zuweisen to courses
+0

Vielen Dank! Es funktioniert gut. Das Problem ist also, dass der Compiler nicht weiß, wie viele Elemente in einem Array von Kursen gespeichert werden. –

0

Erstellen Sie ein einfaches Beispiel ähnlich Ihrem Code. Es funktioniert gut.

class A { 
private: 
    char *field; 
public: 
    A() {}; 
    A(char *field) : field(field) { } 
    char *getField() const { 
     return field; 
    } 
}; 

int main() { 
    int size = 5; 
    A *aList = new A[size]; 
    for (int i = 0; i < size; i++) { 
     aList[i] = A((char *) std::to_string(i).c_str()); 
     std::cout << aList[i].getField(); 
    } 
    return 0; 
} 

es Verwenden Sie Ihre Fehler