我在我的头文件中有如下代码:
typedef struct _bn bnode;我能做到
bnode b;很好,但是
b[i],其中i是一个整型变量,给出了以下错误:
未定义类型“struct_bn”的使用无效
有什么想法吗?
发布于 2009-10-10 15:55:26
就API /库而言,通常情况下,如果你需要一个不透明的结构,你就不允许API的用户声明像数组或静态实例这样的东西。不知道任何关于结构的东西是游戏的名字,所以你可能不得不定义一些函数来操纵它们。大多数声明不透明结构的C库通常都有访问器和修改函数。
一个例子来自Lua (显然Lua状态是一个单用结构,但它是一个想法):
typedef struct lua_State lua_State;
void lua_pushnumber(lua_State *s, lua_Number n);在这种情况下,如果您决定需要多个Lua状态,您将执行以下操作:
lua_State *states[5];
for(int i = 0; i < 5; i++)
states[i] = lua_open();我认为一般的经验法则是,如果你使用不透明的结构,你将只通过指针工作,这几乎是唯一的方法。
发布于 2009-10-09 18:03:27
如上所述,b不是一个数组,因此不能作为一个数组访问。
另外,您希望编译器如何计算出该结构的大小?当您执行诸如bnode b[i]之类的操作时,将留出一定数量的空间以供以后使用。因为你有它,所以没有大小。
你的不透明打算为你做什么?也许如果你进一步解释你正在努力实现的目标,你会得到一个更具启发性的答案……
发布于 2009-10-09 18:02:28
听起来您要么想要一个opaque pointer/PIMPL实现,要么应该包含适当的头文件。
C++中的结构几乎与类相同,因此也适用相同的技术。
https://stackoverflow.com/questions/1545222
复制相似问题