首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C中定义一个不透明的结构数组?

问如何在C中定义一个不透明的结构数组?
EN

Stack Overflow用户
提问于 2009-10-09 17:58:41
回答 5查看 3.4K关注 0票数 1

我在我的头文件中有如下代码:

代码语言:javascript
复制
typedef struct _bn bnode;

我能做到

代码语言:javascript
复制
bnode b;

很好,但是

b[i],其中i是一个整型变量,给出了以下错误:

未定义类型“struct_bn”的使用无效

有什么想法吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-10-10 15:55:26

就API /库而言,通常情况下,如果你需要一个不透明的结构,你就不允许API的用户声明像数组或静态实例这样的东西。不知道任何关于结构的东西是游戏的名字,所以你可能不得不定义一些函数来操纵它们。大多数声明不透明结构的C库通常都有访问器和修改函数。

一个例子来自Lua (显然Lua状态是一个单用结构,但它是一个想法):

代码语言:javascript
复制
typedef struct lua_State lua_State;
void lua_pushnumber(lua_State *s, lua_Number n);

在这种情况下,如果您决定需要多个Lua状态,您将执行以下操作:

代码语言:javascript
复制
lua_State *states[5];
for(int i = 0; i < 5; i++)
    states[i] = lua_open();

我认为一般的经验法则是,如果你使用不透明的结构,你将只通过指针工作,这几乎是唯一的方法。

票数 1
EN

Stack Overflow用户

发布于 2009-10-09 18:03:27

如上所述,b不是一个数组,因此不能作为一个数组访问。

另外,您希望编译器如何计算出该结构的大小?当您执行诸如bnode b[i]之类的操作时,将留出一定数量的空间以供以后使用。因为你有它,所以没有大小。

你的不透明打算为你做什么?也许如果你进一步解释你正在努力实现的目标,你会得到一个更具启发性的答案……

票数 3
EN

Stack Overflow用户

发布于 2009-10-09 18:02:28

听起来您要么想要一个opaque pointer/PIMPL实现,要么应该包含适当的头文件。

C++中的结构几乎与类相同,因此也适用相同的技术。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1545222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档