Я использую стороннюю библиотеку, которая определяет эту структуру:
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
не определен)?Так что я получил в тупик ... Как мне заполнить структуру?