类中带有参数的静态对象成员初始化

Static object member initialization with parameters in class

本文关键字:静态 对象 成员 初始化 参数      更新时间:2023-10-16

尽管我在这个网站上尝试了多次搜索,但我没有找到正确的答案。我再次提出这个问题。

通常,静态对象成员应该在源文件中初始化。

//header file
class A{ 
private: 
   static B*  bPoint ;
public: 
    static void init(int argc, char** argv);
  ... 
};
//Source file: 
B A::bPoint = new B()              //Normally, this should OK. 

但问题是默认的B建筑是私人的,现在我不得不使用另一个公共建筑

 B(int argc, char** argv); 

在这种情况下,new B()将发出编译错误。。那么如何初始化A类中的静态bPoint?

静态成员应该在源文件中定义,但请注意,您可以首先使用空指针初始化它:

// source file:
B* A::bPoint;  // note the pointer to B

然后,如果您的问题是将A::init()的参数转发给B()的构造函数,那么您可以在A::init():中为bPoint分配一个对象

A::init(int argc, char** argv)
{
    bPoint = new B(argc, argv);
}