title: How to initialize a static member object?
body: <p>I didn't know that I didn't know this :) . and a <a href="https://stackoverflow.com/questions/3288848/initialization-of-object-static-members"> similar question here </a> didn't help much.</p>
  
  <p>So here i am asking. Please Consider the following class:</p>
  
  <pre><code>//in Agent.h
  class Agent : public ns3::Object{
  private:
  //...
  
      static BaseWifi m_wifi;
  
  //...
  };
  </code></pre>
  
  <p>is this :</p>
  
  <pre><code>//Agent.cpp
  BaseWifi temp;
  BaseWifi Agent::m_wifi = temp;
  </code></pre>
  
  <p>very much different from this:</p>
  
  <pre><code>//Agent.cpp
  BaseWifi Agent::m_wifi = BaseWifi();
  </code></pre>
  
  <p>The second approach doesn't work for me.
  why and how?</p>
  
  <p>I don't want to trouble you with more codes coz I faced this problem deep in my program. The program generate seg faults as things(members) inside <code>BaseWifi</code>'s constructor are not initialized correctly. when those uninitialized internal members are used, seg faults occur.</p>
  
  <p>Thank you  in advance for your kind comments and answers.</p>
  
  <p>p.s.:
   In fact I found this issue when I hadn't yet initialized this static member and I was deleting an extra line :</p>
  
  <pre><code>BaseWifi temp;
  </code></pre>
  
  <p>in my <code>main()</code>, which added more to my confusion!!!(this one could be dependent on what I put in <code>BaseWifi</code>'s constructor, so dont mind it for now)</p>
  
  <p><strong>Update-1:</strong>
  For those who would like to see the BaseWifi:</p>
  
  <pre><code>class BaseWifi {
      ns3::WifiHelper m_wifiHelper; // a wifi helper apply to setup vehicles Wifi
  
      ns3::NqosWifiMacHelper m_wifiMacHelper; // a wifi mac helper apply to setup vehicles Wifi
  
      ns3::YansWifiPhyHelper m_wifiPhyHelper; // a wifi phy helper apply to setup vehicles Wifi
  
      std::string m_phyMode;
  
      double m_rss;  // -dBm
  
      bool m_init_done;
  
  public:
  
      BaseWifi();
  
      virtual void init();
  
      ns3::NetDeviceContainer Install(ns3::NodeContainer &amp;c);
  
      virtual ~BaseWifi();
  };
  
  BaseWifi::BaseWifi() {
      m_init_done = false;
      m_rss = -80;
      m_phyMode ="DsssRate1Mbps";
      // TODO Auto-generated constructor stub
      init();
  }
  
  void BaseWifi::init() {
      NS_LOG_UNCOND("inside BaseWifi::init()");
        m_wifiHelper.SetStandard (ns3::WIFI_PHY_STANDARD_80211b);
  
        m_wifiPhyHelper =  ns3::YansWifiPhyHelper::Default ();
  
        // This is one parameter that matters when using FixedRssLossModel
        // set it to zero; otherwise, gain will be added
        m_wifiPhyHelper.Set ("RxGain", ns3::DoubleValue (0) );
  
        // ns-3 supports RadioTap and Prism tracing extensions for 802.11b
        m_wifiPhyHelper.SetPcapDataLinkType (ns3::YansWifiPhyHelper::DLT_IEEE802_11_RADIO);
  
        ns3::YansWifiChannelHelper wifiChannel;
  
        wifiChannel.SetPropagationDelay ("ns3::ConstantSpeedPropagationDelayModel");
  
        // The below FixedRssLossModel will cause the rss to be fixed regardless
        // of the distance between the two stations, and the transmit power
        wifiChannel.AddPropagationLoss ("ns3::FixedRssLossModel","Rss",ns3::DoubleValue (m_rss));
  
        m_wifiPhyHelper.SetChannel (wifiChannel.Create ());
  
        // Add a non-QoS upper mac, and disable rate control
        m_wifiMacHelper = ns3::NqosWifiMacHelper::Default ();
  
        m_wifiHelper.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
                                      "DataMode",ns3::StringValue (m_phyMode),
                                      "ControlMode",ns3::StringValue (m_phyMode));
        // Set it to adhoc mode
        m_wifiMacHelper.SetType ("ns3::AdhocWifiMac");
  
        m_init_done = true;
  }
  
  //Install the class's embedded settings on the nodes in this node container.
  ns3::NetDeviceContainer BaseWifi::Install(ns3::NodeContainer &amp;nc) {
      return m_wifiHelper.Install(m_wifiPhyHelper, m_wifiMacHelper, nc);
  }
  </code></pre>