在函数中使用void。不会承认

时间:2014-01-13 15:35:49

标签: c++ function struct void

我遇到了这个功能的问题。该函数应该返回StoredData的类型。

这是我的结构:

struct StoredData
{
    void* data;
    int size;
    int type;
    int compareValue;

    StoredData():

        size(0),
        type(0),
        compareValue(0){}
};

这是我的职责:

StoredData SDI::Array::create(int size, int type, int compareValue)
{
    StoredData temp;
    void* data;
    int input;
    int input2;
    std::cout<<"What type of data would you like to insert?"<<std::endl;
    std::cout<<"1 - Integer"<<std::endl;
    std::cout<<"2 - Boolean"<<std::endl;
    std::cin>>input;
    std::cout<<"What is the value?"<<std::endl;
    std::cin>>input2;
    switch (input)
    {
    case 1:
        size = sizeof(int);
        type = 0;
        data = new int;
        *data = (int)input2;
        break;
    case 2:
        size = sizeof(bool);
        type = 1;
        data = new bool;
        *data = (bool)input2;
        break;
    }
    temp.compareValue=input2;
    temp.data = data;
    temp.type = type;
    temp.size = size;
}

不幸的是,我在使用

的case语句中遇到了问题
*data = (bool)input2;

我得到的错误是它必须是指向完整对象类型的指针。我需要void变量来识别数据,而我却没有运气。有人知道解决方法吗?

我每个都收到2条错误消息。第一个是,

illegal indirection

第二个是,

error C2440: '=' : cannot convert from 'int' to 'void *'

error C2440: '=' : cannot convert from 'bool' to 'void *'

4 个答案:

答案 0 :(得分:3)

您无法取消引用void指针。您必须将其强制转换为可以取消引用的指针类型:

*(bool *) data = (bool) input2;

答案 1 :(得分:1)

您正尝试取消引用void指针并设置其值:

*data = (bool)input2;

这对编译器来说毫无意义。 *data的结果是什么类型?

您需要先将void*转换为有意义的内容:

*(bool*)data = (bool)input2;

或者,您可以在创建动态变量时使用正确的值初始化它们:

data = new int(input2);
...
data = new bool(input2);

这不需要你施展任何东西。

答案 2 :(得分:0)

void 是一个不完整的类型。您可能无法创建不完整类型的对象。

答案 3 :(得分:0)

你无法取消引用普通void*,因为它基本上可以指向任何东西。你要么必须指向别的东西(指定另一个指针):

bool* bool_pointer = new bool;
*bool_pointer = static_cast<bool>(input2);
data = bool_pointer;

或使用类型转换:

*reinterpret_cast<bool*>(data) = static_cast<bool>(input2);