2017-04-01 163 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会更合适。