当将结构转换为指针时,出现“无法转换为指针类型”错误。无法转换为指针类型,投射结构
我试图将ObjectExtended类型的结构强制转换为ObjectBase的指针,ObjectExtended的第一个成员是指向ObjectBase的指针,因此它应该可以工作。
下面的代码:
typedef struct ObjectBase
{
int integer1;
int integer2;
}ObjectBase;
typedef struct ObjectExtended
{
ObjectBase* baseObj;
char* string;
}ObjectExtended;
int main(int argc,char** argv)
{
ObjectExtended* objExtended = malloc(sizeof(ObjectExtended));
objExtended->string = "TEST_OBJECT";
objExtended->baseObj = malloc(sizeof(ObjectBase));
objExtended->baseObj->integer1 = 10;
objExtended->baseObj->integer2 = 11;
printf("Extended Object:\n");
printf("\tString: %s\n",objExtended->string);
printf("\tInt1: %i\n",objExtended->baseObj->integer1);
printf("\tInt2: %i\n",objExtended->baseObj->integer2);
ObjectBase* objBase = (ObjectBase*)(*objExtended);
printf("Base Object:\n");
printf("\tInt1: %i\n",objBase->integer1);
printf("\tInt2: %i\n",objBase->integer2);
free(objExtended->baseObj);
free(objExtended);
return 0;
}
您必须将结构本身作为你的派生类(这么说),而不是一个指针,它的第一个成员。 – michaelmeyer 2014-10-07 19:09:17
这是正确的:您不能将结构转换为指针(ObjectBase * objBase =(ObjectBase *)(* objExtended);')。他们不是一回事。然而,你可以这样做:'ObjectBase * objBase =(ObjectBase *)objExtended;' – lurker 2014-10-07 19:09:38
是否有一种方法来使用指针,而不是结构 – Helios41 2014-10-07 19:16:53