【发布时间】:2011-09-30 19:49:41
【问题描述】:
我正在使用定义此结构的第三方库:
typedef struct
{
unsigned short nbDetectors;
//! structure of detector status
struct DetectorStatus
{
unsigned int lastError; //< last detector internal error
float temperature; //< detector temperature
detector_state state; //< detector state
unsigned short mode; //< detector mode
struct EnergyStatus
{
power_source powerSource; //< front-end power source
frontend_position frontendPosition; //< front-end position relative to the docking station
struct BatteryStatus
{
bool present; //< battery present or not in the detector
unsigned short charge; //< charge level of the battery (in %)
float voltageLevel; //< battery voltage level
float temperature; //< temperature of the battery
unsigned short chargeCycles; //< number of charge/discharge cycles
unsigned short accuracy; //< Expected accuracy for charge level (in %)
bool needCalibration;
} batteryStatus;
} * energyStatus;
struct GridStatus
{
detector_grid grid;
} * gridStatus;
} * detectorStatus;
} HardwareStatus;
该结构被库用作其回调之一传递的数据。所以是图书馆把它填满了,我只是读了它。到目前为止,一切顺利。
但现在我正在为这个库处理的设备编写一个模拟器,所以现在我必须填充其中一个结构,但我无法正确完成。
我试过这个:
HardwareStatus status;
status.detectorStatus->temperature = 20 + rand() % 10;
e.data = &status;
m_pContext->EventCallback( EVT_HARDWARE_STATUS, &e );
当我编译时,我得到:
warning C4700: uninitialized local variable 'status' used
然后我意识到......结构内的指针指向垃圾,很好地抓住了Visual Studio!然后我尝试通过声明最内层结构(BatteryStatus)的实例开始,但这不会编译......因为它不是 typedef'd(它说BatteryStatus 类型未定义)?所以我被难住了......我该如何填充结构?
【问题讨论】:
-
另外,要设置 batteryStatus,你必须写
EnergyStatus::BatteryStatus s; status.batteryStatus = s;注意符合条件的EnergyStatus::...
标签: c++ struct initialization nested