初始化静态指针数组c ++

时间:2017-04-01 12:02:09

标签: c++

我有我的班级:

class Exec {
  static Process* procs_table[];

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

info_init_proc是一个自定义结构,包含初始化Process对象所需的信息

尝试创建构造函数,如下所示:

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

它可以编译,但是当我构建时,我得到“Undefined symbol procs_table”错误。

应该修改什么?

2 个答案:

答案 0 :(得分:3)

当前的问题是声明了静态数组,但未定义。将此行添加到您的CPP文件将解决该问题:

Process* Exec::procs_table[SOME_MAX_VALUE];

但是,似乎static的选择在这里基本上是不正确的,因为在运行时之前你不知道n,分配的大小。在这种情况下,具有std::vector进程指针的单例对象更合适。

答案 1 :(得分:2)

您无法在构造函数中初始化静态成员。构造函数正在创建类的实例,但静态成员由所有实例共享。

这是静态initialization

上的精彩帖子