0

我正在研究第三方模块包装器。我希望我的主头文件没有任何第三方相关的头文件。每个参数类型和返回类型都是不透明的,只需声明它。但是有一个匿名结构定义如下:

typedef struct {
    int x;
    int y;
    int width;
    int height;
} IppiPoint;

我无法修改第三方头文件。我不知道要宣布它。这是我尝试过的和收到的错误消息

1.

struct IppiPoint;
error C2371: 'IppiPoint' : redefinition; different basic types

2.

typedef struct IppiPoint;
... warning C4091: 'typedef ' : ignored on left of 'IppiPoint' when no variable is declared
... error C2371: 'IppiPoint' : redefinition; different basic types

如何声明这样的匿名结构?

4

1 回答 1

1

创建自己的类型struct Bob;。改用它。

在cpp中,定义struct Bob如下:

struct Bob {
  IppiPoint contents;
};

只要IppiPoint是标准布局,就可以reinterpret_cast<IppiPoint*>(pointer_to_bob)合法。

一个指向标准布局结构类型对象的指针可以被 reinterpret_cast 指向它的第一个非静态数据成员(如果它有非静态数据成员)或者它的第一个基类子对象(如果有的话),反之亦然反之亦然。(在第一个数据成员之前不允许填充)。请注意,严格的别名规则仍然适用于此类转换的结果。

也许选择一个比Bob.

于 2016-03-30T12:02:30.813 回答