【问题标题】:pointer and structure with pointers指针和带指针的结构
【发布时间】:2015-07-10 05:07:55
【问题描述】:

这是我的问题: 我有一个结构:

typedef struct Data_Package{
    int type;
    size_t size;
    void* data;
}Data_Package;

我有一个函数:(编辑:Armen Tsirunyan 评论)(它是一个 .C 函数)

void myFunc(Data_Package* ioData) {
    ioData->data = malloc(sizeof(double));
    (ioData->data)= (double*)62.5
} //that doesn't work

以及我想在其中使用我的功能的 main.cpp:

Data_Package* ioData=0;
/* some random operation that change the data,type,... */
myFunc(ioData);

stc::cout << *static_cast<double*>(ioData->data) << std::endl  //I want to display te value data (and not the address)

所以我想知道如何更改函数中的值数据,然后将其显示在 main.cpp 中(我需要使用指针并且数据是 void* 因为它可能是 double 或 bool 或 int 或 .. .)

非常感谢。

博士。

【问题讨论】:

  • 看起来你最好使用构造函数和boost:variant
  • 我想我可以试试,但它和定义的类型一样精确吗?例如,我从另一个文件中收到一个 double。如果我将其转换为变体,我会丢失数据和精度吗?
  • 现在有什么问题?我看到你已经改变了你的问题(并使答案无效)。您不应该以这种方式编辑您的问题(不要更改其内容,只需在 EDIT 部分添加更多信息)。那么,什么不起作用?你想做什么?
  • 仍然是同样的问题:我无法访问 ioData->data 值。我已经尝试了提出的解决方案并更改了函数,但它仍然无法编译(ioData->data = (double*)62.5 的问题:无法转换为指针)。
  • 好吧,您不能将双精度值转换为指针(您正在使用 (double*)62.5 进行操作)。 @ArmenTsirunyan 向您展示了如何做到这一点 - *(ioData-&gt;data) = 65.5; 。试试吧。

标签: c++ pointers structure


【解决方案1】:

1)

ioData->data

类型为void*。您不能取消引用 void 指针。您应该首先将其转换为适当的指针类型,在您的情况下为 double

cout << *static_cast<double*>(ioData->data)

2)

*(ioData->data) = 65.5;

你的指针还没有指向任何有效的东西,你不能取消引用它。你可能想要做的是

ioData->data = new double;
*static_cast<double*>(ioData->data) = 65.5

3)

如您所见,处理void* 是丑陋的。您是否有任何具体原因double 直接存储在您的结构中?

【讨论】:

  • 嗯,我会尝试演员阵容,但我不想在我的函数中创建 ioData。我假设 ioData 主要存在。所以我不必在我的函数中创建“ioData->data = new double”?我将尝试强制转换并在 main.cpp 中声明对象,然后我会回来
  • 我不能使用 double 因为数据可以是任何类型(double 或 int 或 bool 或其他)
  • 我试过了,但是函数没有编译... =/
猜你喜欢
  • 1970-01-01
  • 2013-02-15
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 2020-08-19
  • 1970-01-01
  • 2016-03-21
相关资源
最近更新 更多