2017-04-01 243 views
1

我有我的課:初始化靜態指針數組C++

class Exec { 
    static Process* procs_table[]; 

public: 
Exec(int num, info_init_proc* proc); 
}; 

info_init_proc是信息的自定義結構必要的初始化進程對象

並嘗試建立如下的構造:

Exec::Exec(int num, info_init_proc* proc) { 
    int i; 
    for (i = 0; i < num; i++) { 
    Exec::procs_table[i] = new Process(proc[i]); 
    } 
} 

它可以編譯,但是當我建立我得到「未定義的符號procs_table」錯誤。

應該修改什麼?

回答

2

您無法在構造函數中初始化靜態成員。構造函數創建類的實例,但靜態成員由所有實例共享。

這裏是一個很棒的帖子on static initialization

3

直接的問題是你的靜態數組是聲明的,但沒有定義。添加此行到您的CPP文件將解決這個問題:

Process* Exec::procs_table[SOME_MAX_VALUE]; 

然而,看來的static的選擇是根本不正確在這裏,因爲你不知道n,分配的大小,直到運行時。在這種情況下,包含進程指針的單個對象std::vector會更合適。