错误:“(”标记之前的预期构造函数、析构函数或类型转换?
Posted
技术标签:
【中文标题】错误:“(”标记之前的预期构造函数、析构函数或类型转换?【英文标题】:error: expected constructor, destructor, or type conversion before '(' token? 【发布时间】:2014-07-07 17:44:13 【问题描述】:我正在尝试使用 mex (changeanalysis.cpp) 编译一个 cpp 文件。我在 MAC OS X 10.7 上有 Matlab R2012a,Xcode 4.6。在文件 changeanalysis.cpp 中,包含 aef_global_dllexport.h。 aef_global_dllexport.h 的部分内容如下:
////////////////////////
// DLL EXPORT FUNCTIONS
////////////////////////
#define DLLEXPORT _declspec(dllexport)
DLLEXPORT double maha_dist_3D_ex( double x,
double y,
double z,
double* mean,
double** icovm);
DLLEXPORT int matrix_inv_ND_ex( double** matND,
double& det,
int Dim);
DLLEXPORT int matrix_copy3x3_ex( double** x,
double** y);
.
.
.
当我编译文件 changeanalysis.cpp 时,我在命令提示符处收到以下错误消息:
mex -I"/Users/marzi/Documents/MATLAB" changeanalysis.cpp
在 changeanalysis.cpp:58 中包含的文件中:
/Users/marzi/Documents/MATLAB/aef_global_dllexport.h:7:错误: '(' 标记之前的预期构造函数、析构函数或类型转换
/Users/marzi/Documents/MATLAB/aef_global_dllexport.h:13:错误: '(' 标记之前的预期构造函数、析构函数或类型转换
/Users/marzi/Documents/MATLAB/aef_global_dllexport.h:17:错误: '(' 标记之前的预期构造函数、析构函数或类型转换
/Users/marzi/Documents/MATLAB/aef_global_dllexport.h:20:错误: '(' 标记之前的预期构造函数、析构函数或类型转换
/Users/marzi/Documents/MATLAB/aef_global_dllexport.h:22:错误: '(' 标记之前的预期构造函数、析构函数或类型转换
/Users/marzi/Documents/MATLAB/aef_global_dllexport.h:24:错误: '(' 标记之前的预期构造函数、析构函数或类型转换
/Users/marzi/Documents/MATLAB/aef_global_dllexport.h:29:错误: '(' 标记之前的预期构造函数、析构函数或类型转换
/Users/marzi/Documents/MATLAB/aef_global_dllexport.h:31:错误: '(' 标记之前的预期构造函数、析构函数或类型转换
/Users/marzi/Documents/MATLAB/aef_global_dllexport.h:50:错误: '(' 标记之前的预期构造函数、析构函数或类型转换
/Users/marzi/Documents/MATLAB/aef_global_dllexport.h:75:错误: '(' 标记之前的预期构造函数、析构函数或类型转换 /Users/marzi/Documents/MATLAB/aef_global_dllexport.h:100:错误: '(' 标记之前的预期构造函数、析构函数或类型转换
mex:“changeanalysis.cpp”的编译失败。
使用 mex 时出错(第 206 行)无法成功完成。
有谁知道如何解决这个问题或者这个错误的原因是什么?
谢谢。
【问题讨论】:
文件changeanalysis.cpp
是您的文件吗?您包含的任何头文件是否在struct
或class
的末尾缺少分号?或者错过右括号或花括号?
此文件是肺结节分割项目的一部分。作为该项目的新成员,我必须编译文件以生成用于分割肺结节的 Matlab mex 插件。在文件 changeanalysis.cpp 中,仅包含头文件 aef_global_dllexport.h。
错误出现在头文件 (aef_global_dllexport.h) 的那些行中,其中有一个 DLLEXPORT 作为函数的输出。这是否与我正在使用 mac 并且没有 Visual Studio 的事实有关?
_declspec
不是 VC++ 唯一的东西吗?
我想。那么,我现在该怎么办?我应该在 Windows 上编译这些文件吗?
【参考方案1】:
您正在使用 Windows 表示法来声明导出的函数。您使用的符号应取决于平台。如果你这样做,你可以跨平台兼容:
#if defined _WIN32 || defined __CYGWIN__ || defined __MINGW32__
#ifdef BUILDING_DLL
#ifdef __GNUC__
#define DLL_PUBLIC __attribute__ ((dllexport))
#else
#define DLL_PUBLIC __declspec(dllexport) // Note: actually gcc seems to also supports this syntax.
#endif
#else
#ifdef __GNUC__
#define DLL_PUBLIC __attribute__ ((dllimport))
#else
#define DLL_PUBLIC __declspec(dllimport) // Note: actually gcc seems to also supports this syntax.
#endif
#endif
#define DLL_LOCAL
#else
#if __GNUC__ >= 4
#define DLL_PUBLIC __attribute__ ((visibility ("default")))
#define DLL_LOCAL __attribute__ ((visibility ("hidden")))
#else
#define DLL_PUBLIC
#define DLL_LOCAL
#endif
#endif
【讨论】:
以上是关于错误:“(”标记之前的预期构造函数、析构函数或类型转换?的主要内容,如果未能解决你的问题,请参考以下文章