2016-03-19 5 views
1

私は、ダイナミックな "インストラクタ"オブジェクトのダイナミックな配列である単純なインストラクタリストを実装しようとしています。まず第一に私はであり、ベクターなどもSTLを使用することはできません。目標はヒープ上のダイナミックインストラクター配列をデフォルト値で開始することです。インストラクターを追加する必要がある場合は、必要に応じて配列サイズを拡張します。 Instructorオブジェクトのサイズも動的なので、デフォルトサイズでインストラクタの配列を初期化することはできません。これを処理する良い方法はありますか?ダイナミックオブジェクトのダイナミックアレイ

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

それはエラーがスローされます:ここで

はインストラクタークラス

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(); 
}; 

私は配列を初期化しようとする部分であり、未知のサイズの配列を含むタイプが許可されていないが

+0

あなたのエラーを修正するためにそれを使用して、あなたはすでに 'instructorList'のための問題を解決しました。 'courses'リストは同じテクニックを使うことができます。 –

+0

それはコンパイルし、完全に正常に動作します。 http://ideone.com/d7y0Qx – anukul

+0

@BoPerssonええ、そうです、答えは同じロジックを提供します。ありがとう! –

答えて

3

ポインタを使用して配列のアドレスを格納します。

代わり

string courses[]; 

使用

string *courses; 

と要素の数を拡張するに

courses = new string[size_of_elements]; 

ようにそれを初期化するの、あなたは

    になります
  1. のみ古い配列(ここでは新しい配列を破壊しない!)
  2. は、新しい配列のアドレスを割り当て破壊する新しい配列
  3. に新しいサイズと古い配列の
  4. コピーの内容を新しい配列を割り当て〜courses
+0

ありがとう!それはうまく動作します。だから問題は、コンパイラはどのくらいの数の要素がコース配列に格納されるのか分からないのですか? –

0

コードに似た簡単な例を作成します。それはうまく動作します。

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; 
} 

関連する問題