【发布时间】:2018-12-14 12:04:16
【问题描述】:
我有一个带有头文件的 C++ dll,它引用了一些生成的(Matlab 编码器)匿名结构。我正在尝试转发声明这些结构,以避免在新项目中包含我的 DLL 中的主 .h 文件。
我已经看到 some would deem it impossible to forward declare a struct without a name and just tell me to name my structs,但就我而言,我无法控制 matlab 如何生成我的结构。因此,我冒昧地再次问这个问题。
是否有一种方法可以在不更改其来源的情况下转发声明封闭结构?
来自生成文件的示例结构我无法更改并且不想包含在我的标题中:
typedef struct {
real_T V_n[21];
real_T ROP;
} ExtY_CMSim_T;
DLL 头文件:
// Forward Declarations:
typedef struct ExtY_Sim_T;
extern "C" {
extern __declspec(dllexport) void getOutputs(ExtY_Sim_T &output);
}
在编译最后一个代码 sn-p 时,我被告知“ExtY_Sim_T”已经被声明为 typedef。
【问题讨论】:
-
生成的文件是C,不是C++。尝试将前向声明放入
extern "C" { ... }。 -
生成的文件是C,不是C++。对需要使用这些定义的目标文件使用 C 编译器,而不是 C++ 编译器。
-
谢谢!在 extern "C" {...} 中移动前向声明让我更进一步。但我收到以下两条编译时消息:“警告 C4091:'typedef':在没有声明变量时,在 'ExtY_CMSim_T' 左侧被忽略”和“错误 C2371:'ExtY_Sim_T':重新定义;不同的基本类型”
标签: c++ struct forward-declaration matlab-coder