我搜索了前向聲明,並沒有看到任何讓我的情況有效的方法。所以在這裏,它是:正向聲明在C++中定義的枚舉C
1)有一個C-頭文件,導出接口,從而爲大型多組件軟件說話,包含的typedef
「export.h枚舉「:
// This is in "C"!
typedef enum _VM_TYPE {...., ...., ...,} VM_TYPE;
2)代碼的一部分,在C++,使用該出口。
「cpp_code.cpp」:
// This is in C++
#include "export.h"
#include "cpp_header.hpp"
{ .... using VM_TYPE values to do stuffs....}
「cpp_header.hpp」:
// Need to somehow forward declear VM_TYPE here but how?
Struct VM_INFO {
....
VM_TYPE VType; //I need to add this enum to the struct
....
};
所以很明顯,問題是出在cpp_head.hpp,因爲它不知道的枚舉。
我嘗試添加到cpp_header.hpp
typedef enum _VM_TYPE VM_TYPE;
,它會實際工作。 那麼爲什麼這個工作?因爲它有C風格的語法?! 無論如何,我被告知不要這樣做(「這是C++,而不是C」),由上層的「管理層」來完成。
根據目前的情況,有沒有其他方法可以完成這項工作?他們不想更改/添加包含文件; 「枚舉類」只是C++,正確嗎?在cpp_header.hpp中添加「枚舉VM_TYPE」會導致重定義錯誤。
有什麼想法?謝謝。
http://stackoverflow.com/questions/71416/forward-declaring-an-enum-in-c – alexbuisson
任何不包括export.h在cpp_header的原因?無論如何,它似乎依賴於枚舉。除非您使用指針/引用,否則您無法使用類/結構來完成此操作。 – imreal
@alexbuisson我已經閱讀了該線程。我明白爲什麼前向聲明不能在C++(基礎類型)中工作,但不知道我的情況是否有任何解決方法。 – Andrew