Я не знал, что я этого не знал :). и similar question here ничего не помогли.Как инициализировать статический объект-член?
Итак, я спрашиваю. Пожалуйста Рассмотрим следующий класс:
//in Agent.h
class Agent : public ns3::Object{
private:
//...
static BaseWifi m_wifi;
//...
};
это:
//Agent.cpp
BaseWifi temp;
BaseWifi Agent::m_wifi = temp;
очень сильно отличается от этого:
//Agent.cpp
BaseWifi Agent::m_wifi = BaseWifi();
Второй подход не работает для меня. почему и как?
Я не хочу беспокоить вас большим количеством кодов. Я столкнулся с этой проблемой глубоко в своей программе. Программа генерирует seg-ошибки, поскольку объекты (элементы) внутри конструктора BaseWifi
не инициализированы правильно. когда используются неинициализированные внутренние элементы, возникают сбои seg.
Благодарим вас за ваши комментарии и ответы.
пс: На самом деле я нашел этот вопрос, когда я еще не инициализирован этот статический член и я удалить дополнительную строку:
BaseWifi temp;
в моей main()
, который добавил больше моей путаницы !! ! (это один может зависеть от того, что я положил в конструктор BaseWifi
«с, так что не возражают против этого сейчас)
Update-1: для тех, кто хотел бы видеть BaseWifi:
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 &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 &nc) {
return m_wifiHelper.Install(m_wifiPhyHelper, m_wifiMacHelper, nc);
}
@rahman Что означает «не работает для меня», точно? – jrok
Для второго aprproach вы получаете ошибки компиляции? Помните, что в этом случае эти ошибки? Потому что нормально это было бы хорошо. –
@JoachimPileborg no сбор погрешность. он генерирует seg-ошибки, поскольку объекты (элементы) внутри конструктора BaseWifi не инициализируются правильно. когда эти внутренние элементы используются, происходят сбои seg. – rahman