我搜索了前向声明,并没有看到任何让我的情况有效的方法。所以在这里,它是:正向声明在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