我遇到了这个功能的问题。该函数应该返回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 *'
答案 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);