【发布时间】:2011-08-31 11:42:57
【问题描述】:
悬赏问题:所以,这两个Foos 不是一回事。美好的。第二种形式在图书馆给出。 鉴于我无法更改它,我该如何前向声明它?
我一直认为 C 和 C++ 允许重复声明,前提是没有重复定义。然后我在尝试编写扩展 C 库的 C++ 代码时遇到了这个问题。
struct Foo;
typedef struct {} Foo;
这会产生以下错误:
'struct Foo' 之前有一个声明为'struct Foo'
我要转发声明,该死!这里有什么问题?
【问题讨论】:
-
什么是编译器?另外,空的声明可能会打扰它?
-
没有一种语言叫做“C/C++”,尤其是在结构的上下文中。有太多所谓的 C++ 编写者在他们的代码中乱扔“结构”,就像 1989 年一样。
-
@Kerrek 在 C++ 代码中
struct没有任何问题,我用它来表示我正在编写一个未封装的 POD 类型。 -
@spraff:我认为 Kerrek 指的是 C 的“习语”,即不将
structs 隐藏在typedef后面,而是做类似 voidfoo(struct MyStruct *p);之类的事情。 -
@Oli:没错。还有诸如 typedef 定义之类的东西,
typedef struct Foo { /* ... /* } Foo;.
标签: c++ c struct typedef forward-declaration