2012-03-19 3 views
-1

Enum: определениеEnum указатели в C++

enum DataStatus 
    { 
     DataNotAvailable = -1, 
     DataLocallyAvailable = 0, 
     DataExternallyAvailable = 1, 
    }; 

Функции:

GetDataStatusByFrame(UINT PI_uiRequestFrameNo, DataStatus *PO_peDataStatus); 

сравнительные:

IDataHandler::DataStatus* pinnedPointer = new IDataHandler::DataStatus(); 
    GetDataStatusByFrame(1, pinnedPointer); 

    if (pinnedPointer == IDataHandler::DataStatus::DataNotAvailable) // 'cannot convert' exception 
    { 
     // ... 
    } 

Вопрос:

Как я могу сравнить эти типы или МОО t отбрасывает их в один и тот же тип данных?

+2

Можете ли вы не просто разыменовать указатель? – adelphus

+2

Возможно, вы могли бы сделать с некоторой информацией * назад к основам. Подумайте о том, как читать указатели в своей любимой книге. –

ответ

4

Этот API выглядит так, чтобы его вызывали чуть более простым способом, чтобы избежать динамического выделения памяти, которую необходимо очистить позже. Просто поместите переменную в стек, и она будет очищена автоматически;

IDataHandler::DataStatus status; 

GetDataStatusByFrame(1, &status); 

if (status == IDataHandler::DataStatus::DataNotAvailable) // 'cannot convert' exception 
{ 
    // ... 
} 
3

Использование

if (*pinnedPointer == IDataHandler::DataStatus::DataNotAvailable) 
3
if (*pinnedPointer == IDataHandler::DataStatus::DataNotAvailable) 
{ 
    //... 
} 
1

ли распределение необходимо? Почему бы не сделать следующее вместо этого?

IDataHandler::DataStatus status; 
GetDataStatusByFrame(1, &status); 
if (status == IDataHandler::DataStatus::DataNotAvailable) { 
    // ... 
} 

Очень редко выделить на enum указатель. Обычно вы передаете адрес статически назначенной переменной.

Смежные вопросы