C++ 错误:在';之前需要构造函数、析构函数或类型转换;(';代币?

C++ 错误:在';之前需要构造函数、析构函数或类型转换;(';代币?,c++,matlab,dllexport,C++,Matlab,Dllexport,我正在尝试使用mex(changealysis.cpp)编译一个cpp文件。我在MAC OS X 10.7上有Matlab R2012a,Xcode 4.6。在changealysis.cpp文件中,包含aef_global_dllexport.h。aef_global_dllexport.h的某些部分如下: //////////////////////// // DLL EXPORT FUNCTIONS //////////////////////// #def

我正在尝试使用mex(changealysis.cpp)编译一个cpp文件。我在MAC OS X 10.7上有Matlab R2012a,Xcode 4.6。在changealysis.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);
    .
    .
    .
编译文件changelanalysis.cpp时,在命令提示下收到以下错误消息:

mex-I“/Users/marzi/Documents/MATLAB”changealysis.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行)无法成功完成

是否有人知道如何修复此问题,或者此错误的原因是什么


谢谢。

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

文件
changesanalysis.cpp
是您的文件吗?您包含的任何头文件是否在
struct
class
结尾处缺少分号?或者缺少右括号或大括号?此文件是肺结节分割项目的一部分。作为此项目的新成员,我必须编译这些文件以生成用于分割肺结节的Matlab mex插件。在changeanalysis.cpp文件中,仅包含头文件aef_global_dllexport.h。错误出现在头文件(aef_global_dllexport.h)的那些行中函数的输出有一个DLLEXPORT。这与我在mac上工作而没有Visual Studio这一事实有关吗?难道不是VC++唯一的东西吗?我想。那么,我现在应该怎么做?我应该在windows上编译这些文件吗?