错误:“(”标记之前的预期构造函数、析构函数或类型转换?

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 是您的文件吗?您包含的任何头文件是否在structclass 的末尾缺少分号?或者错过右括号或花括号? 此文件是肺结节分割项目的一部分。作为该项目的新成员,我必须编译文件以生成用于分割肺结节的 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

【讨论】:

以上是关于错误:“(”标记之前的预期构造函数、析构函数或类型转换?的主要内容,如果未能解决你的问题,请参考以下文章

错误:“(”标记之前的预期构造函数、析构函数或类型转换?

错误:预期的构造函数、析构函数、“<”标记之前的类型转换

错误:“;”之前的预期构造函数、析构函数或类型转换令牌

错误:“。”之前的预期构造函数、析构函数或类型转换令牌 - 了解 fstream

OpenCV 预期的构造函数、析构函数或类型转换

意外的标记; '构造函数、函数、访问器或变量'预期