我想知道是否有人可以提供建議,而無需重新構建,以解決這種情況的方法:我有一個包含類聲明的頭並聲明瞭它使用的一些類引用/指針這顯然是很好的做法相比,只是包含這些類的頭文件。如何解決在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'既不是類也不是結構。我會改變這個例子來使其更清楚,但爲了避免疑問,它仍然沒有幫助。 –