我試圖創建一個可以是任何類型的對象。下面的代碼:從'float'類型轉換爲'float *'類型無效
#include <stdio.h>
class thing
{
public:
void *p;
char type;
thing(const char* x)
{
p=(char*)x;
type=0;
}
thing(int x)
{
p=(int*)x;
type=1;
}
thing(bool x)
{
p=(bool*)x;
type=2;
}
/*
thing(float x)
{
p=(float*)x;
type=3;
}
*/
void print()
{
switch(type)
{
case 0:
printf("%s\n", p);
break;
case 1:
printf("%i\n", p);
break;
case 2:
if(p>0)
printf("true\n");
else
printf("false\n");
break;
case 3:
printf("%f\n", p);
break;
default:
break;
}
}
};
int main()
{
thing t0("Hello!");
thing t1(123);
thing t2(false);
t0.print();
t1.print();
t2.print();
return 0;
}
代碼工作,當我運行程序,它會顯示:
Hello!
123
false
但是,如果我去掉浮構造函數,編譯寫入以下錯誤:
main.cpp: In constructor 'thing :: thing (float)': main.cpp: 30:13:
error: invalid cast from type 'float' to type 'float *'
爲什麼它不適用於浮動類型? 我使用:Windows XP SP3,MinGW GCC 4.7.2。
爲什麼不使用'boost :: any'? – chris
您是否想要將您正在投射的值的地址存儲到指針?您不能將浮點值存儲爲指針。 –
'p =(float *)x';你正在將一個浮點數轉換爲浮點數*。 –