-4

あらゆるタイプのオブジェクトを作成しようとしています。コードは次のとおりです。

#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

しかし、float コンストラクターのコメントを外すと、コンパイラーは次のエラーを書き込みます。

main.cpp: In constructor 'thing :: thing (float)': main.cpp: 30:13:
error: invalid cast from type 'float' to type 'float *'

float 型で機能しないのはなぜですか? 私が使用するもの: Windows XP SP3、MinGW GCC 4.7.2。

4

1 に答える 1