【问题标题】:Forward declaration of anonymous typedef struct C++匿名 typedef struct C++ 的前向声明
【发布时间】: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


【解决方案1】:

一种选择是告诉 MATLAB Coder 从您提供的头文件中导入类型定义。带有externHeaderFile 参数的coder.cstructname 实现了这一点:coder.cstructname(structVariable, 'extern', 'HeaderFile', 'myHeader.h')

然后您可以在myHeader.h 中声明并根据需要使用前向声明。

我们还对您的请求进行了内部记录,以便我们在未来版本的 MATLAB Coder 中考虑它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 2013-06-02
    相关资源
    最近更新 更多