void* val = 0;
cout << "\n\tSelect a value to enter: "; cin >> val;
SDI::StoredData* temp = new SDI::StoredData();
temp->data = val;
ARR->insert(temp,0,false);
^这个,有效。存储了值,我的getAllValues
函数完美运行。
完成同样的事情:
void* val = new int(10);
SDI::StoredData* temp = new SDI::StoredData();
temp->data = val;
ARR->insert(temp,0,false);
或
int val = 10;
void* val = &val;
SDI::StoredData* temp = new SDI::StoredData();
temp->data = val;
ARR->insert(temp,0,false);
或任何其他变体返回空值,为什么EARTH会发生这种情况?是的,我知道,我不应该使用void*
,但这是一项要求。谢谢!
编辑:
for(int i = 0; i<max; i++)
{
if(data[i].data!= nullptr)
{
int *p = (int*)data[i].data;
}
}
答案 0 :(得分:0)
让我们检查“有效”的代码。
void* val = 0;
cout << "\n\tSelect a value to enter: "; cin >> val;
您正在调用cin.operator>>(void*)
,其工作方式与数字类型的getter非常相似 - 它会读取一个数字,并将其存储在val
中。
所以在这里,temp->data
不是指向任何东西的指针;这是输入的实际数字。
至于你的第二个片段:
void* val = new int(10);
在这种情况下,val
不是数字。这是一个数字的地址。 (是的,地址在技术上也是一个数字。这是你的第一个代码段工作的唯一原因。但在这里,它不是10;它类似于0x30528680
,包含的对象的地址数字10。)
至于你的第三个:
int val = 10;
void* val = &val;
如果这甚至是编译,val
将是一个指向局部变量的指针,它只存在于它所在函数的末尾。返回的瞬间,该值将指向who-know -什么。 (当然,它不会编译,因为你试图重新定义val
...)