2014-07-07 5 views
1

Я пытаюсь скомпилировать файл cpp с помощью mex (changeanalysis.cpp). У меня есть Matlab R2012a, Xcode 4.6 на MAC OS X 10.7. . В файле 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/Марци/Документы/MATLAB" changeanalysis.cpp

В файле включены из changeanalysis.cpp: 58:

/Users/marzi/Documents/MATLAB/aef_global_dllexport.h:7: ошибка: ожидается, конструктор, деструктор, или тип преобразования перед '(' лексем

/Пользователи/Маре/Документы/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: ошибка: ожидается, конструктор, деструктор, или преобразование типов до того '(' маркера

/Пользователи/Маре/Документы/MATLAB/aef_global_dllexport. h: 29: ошибка: ожидаемый конструктор, деструктор или преобразование типа до '(' токен

/Пользователи/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: ошибка: ожидается, конструктор, деструктор, или преобразование типов до того '(' лексема /Пользователи/Маре/Документы/MATLAB/aef_global_dllexport.h: 100: ошибка: ожидаемый конструктор, деструктор или преобразование типа перед '(' токен

mex: скомпилировать 'changeanalysis.cpp "' не удалось.

Ошибка при использовании mex (строка 206) Не удалось выполнить успешно.

Кто-нибудь знает, как исправить это или в чем причина этой ошибки?

Спасибо.

+0

Файл 'changeanalysis.cpp' - ваш файл? Включаете ли какие-либо файлы заголовков пропущенные точки с запятой в конце 'struct' или' class'? Или пропустите закрывающуюся скобку или фигурные скобки? –

+0

Этот файл является частью проекта сегментации легких. Будучи новым участником этого проекта, я должен скомпилировать файлы, чтобы генерировать Matlab mex plugin для сегментации легких. В файле changeanalysis.cpp включен только заголовочный файл aef_global_dllexport.h. – margol

+0

Ошибки находятся в этих строках файла заголовка (aef_global_dllexport.h), где в качестве выхода функции есть DLLEXPORT. Это связано с тем, что я работаю над Mac, и у меня нет Visual Studio? – margol

ответ

0

Вы используете нотацию 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 
Смежные вопросы

 Смежные вопросы