С GCC этот вид назначения "по умолчанию" запрещен.Вам придется форсировать компиляцию с помощью флага -fpermissive.
Я думаю, что это не "хорошо".Я предпочитаю такой подход:
MyClass* p = WantItInCase1();
int flag;
if (p == NULL)
flag = 0x1;
else
p = WantItInCase2();
if (p == NULL)
flag = 0x2;
...
CheckCases (flag);
Конечно, больше "памяти" используется, но сегодня, что такое 4 байта?
Итак, чтобы ответить на ваш вопрос, это назначениеочень обескуражены ... Но ваша программа может работать ...
Если вы попытаетесь прочитать p (в вашем методе checkclass), вы напишите что-то вроде:
if(p == 0x1) ...
Такого родаof line сгенерирует предупреждение (с GCC), потому что вы сравниваете указатель на целое число, поэтому: один флаг предупреждения + -fpermissive = не делайте этого!