错误:令牌之前'('预期的构造函数、析构函数或类型转换?

error: expected constructor, destructor, or type conversion before '(' token?

本文关键字:构造函数 析构函数 类型转换 令牌 错误      更新时间:2023-10-16

我正在尝试使用mex (changeanalysis.cpp)编译cpp文件。我有Matlab R2012a, MAC OS X 10.7上的Xcode 4.6。在changeanalysis.cpp文件中,包含了aef_global_dlexport .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:

/用户/marzi/文件/MATLAB/aef_global_dllexport.h: 7:错误:在'('令牌

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

/用户/marzi/文件/MATLAB/aef_global_dllexport.h: 13:错误:在'('令牌

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

/用户/marzi/文件/MATLAB/aef_global_dllexport.h: 17:错误:在'('令牌

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

/用户/marzi/文件/MATLAB/aef_global_dllexport.h: 20:错误:在'('令牌

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

/用户/marzi/文件/MATLAB/aef_global_dllexport.h: 22:错误:在'('令牌

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

/用户/marzi/文件/MATLAB/aef_global_dllexport.h: 24:错误:在'('令牌

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

/用户/marzi/文件/MATLAB/aef_global_dllexport.h: 29:错误:在'('令牌

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

/用户/marzi/文件/MATLAB/aef_global_dllexport.h: 31:错误:在'('令牌

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

/用户/marzi/文件/MATLAB/aef_global_dllexport.h: 50:错误:在'('令牌

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

/用户/marzi/文件/MATLAB/aef_global_dllexport.h: 75:错误:在'('标记之前预期的构造函数、析构函数或类型转换/用户/marzi/文件/MATLAB/aef_global_dllexport.h: 100:错误:在'('令牌

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

mex:编译' ' changeanalysis.cpp ' '失败。

使用mex出错(第206行)无法成功完成。

有没有人知道如何解决这个问题,或者这个错误的原因是什么?

谢谢。

您正在使用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