我想知道是否有人可以提供建议,而无需重新构建,以解决这种情况的方法:我有一个包含类声明的头并声明了它使用的一些类引用/指针这显然是很好的做法相比,只是包含这些类的头文件。如何解决在C++头文件中声明typedef
struct Foo;
struct Bar;
struct MyStruct
{
void doIt(const Foo* foo);
void doIt(const Bar* bar);
};
然而,尽管在上述的Foo的例子是一个类,酒吧实际上是按照下面的粗实例的类的一个typedef:
#include <fd_ex.h>
struct Foo
{
int a;
};
struct Bar_
{
int a;
};
typedef Bar_ Bar;
这会导致一些问题,如predeclaring struct Bar
明显不正确 - Bar
不是一个结构:
"fd_ex.cpp", line 13: Error: Multiple declaration for Bar.
"fd_ex.cpp", line 19: Error: The name Bar is ambiguous, Bar and Bar.
2 Error(s) detected.
我不希望暴露Bar_
如果可能的话,主要是因为在现实生活中这可能比这个例子复杂得多。
但是,如果我有为Bar
没有控制在结构声明和类型定义,还有什么技术,我可以在MyStruct
头使用跟上,宣布前Bar
精神?
我猜你的编译器只是混淆起来,你预定义的bar作为一个类,然后(通过typedef)作为一个结构Bar_。尝试使用结构栏;在你的头文件中。另外,在毫无意义地抨击其他人使用结构的倾向之前,请记住http://msdn.microsoft.com/en-us/library/ms229017.aspx ;-) – Najzero
你基本上说:“我想要声明一个函数,但我不会告诉你这个参数有什么类型。“你不能那样做。 –
@Najzero:它们实际上都是结构,但这个例子并不重要,因为'Bar'既不是类也不是结构。我会改变这个例子来使其更清楚,但为了避免疑问,它仍然没有帮助。 –