【发布时间】:2016-03-30 11:32:03
【问题描述】:
我正在开发第三方模块包装器。我希望我的主头文件没有任何第三方相关的头文件。每个参数类型和返回类型都是不透明的,只需声明它。但是有一个匿名结构定义如下:
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
如何声明这样的匿名结构?
【问题讨论】:
-
为什么要声明结构?您显然不应该这样做,只能使用您的第三方头文件已经提供的类型别名。
-
我想把 type-alias 移到 cpp 文件中,这样我的客户在使用时就看不到任何第三方头了。
-
IppiPoint;呢? -
@Fynn 你的意思是在没有结构的情况下声明它吗?它使编译器抱怨缺少类型说明符。
-
目前你的源做“看到”第三方头文件(否则你不会得到“重新定义”错误)。如果您声明这种类型的非指针变量,或者尝试使用
malloc进行分配,那么您无论如何需要完整的结构。
标签: c++ opaque-pointers