2015-08-26 4 views
-1

Я использую GNU C++ 4.4.7 на Linux машине скомпилировать следующий код:Невозможно использовать макросы в C++ объявления класса

#pragma once 
#include <string> 
using namespace std; 

#ifdef _LOG_SHLIB_EXPORT 
#define LOG_SHLIB _declspec(dllexport) 
#else 
#define LOG_SHLIB _declspec(dllimport) 
#endif 

class LOG_SHLIB debug_logger <--- "Syntax error" 
{ 

... 
}; 
+2

При постановке вопросов, касающихся ошибок сборки, пожалуйста, включите * body * и * unedited * ошибку в тексте вопроса. –

+0

Кроме того, согласно [этой статье] (https://gcc.gnu.org/wiki/Visibility), он говорит: «... что не-Windows-сборки GCC не предлагают эквивалент __declspec (dllexport) .. . " –

+0

Какую сборку GCC вы используете? Это окна построены? Как сказано, ни '_declspec', ни' __declspec' не имеет особого значения в других сборках. – skyking

ответ

2

Прежде всего, это __declspec (dllexport) с двойным подчеркиванием. Не _declspec (dllexport) только с одним.
Во-вторых, в Linux нет такой вещи, как __declspec (dllexport). Нам просто все равно, является ли это функцией в таком файле (dll в системах Unix) или я хочу импортировать/экспортировать его.

Это должно быть то, что вы хотите.

#pragma once 
#include <string> 
using namespace std; 

#if defined(WIN32) || defined(WIN64) 
    #ifdef _LOG_SHLIB_EXPORT 
     #define LOG_SHLIB __declspec(dllexport) 
    #else 
     #define LOG_SHLIB __declspec(dllimport) 
    #endif 
#else 
    #define LOG_SHLIB 
#endif 

class LOG_SHLIB debug_logger 
{ 
    ........ 
}; 
+0

Вы забыли сделать символы подчеркивания в своем двойном коде, они все еще едины, несмотря на ваши объяснения. –

+0

oops, tkx, теперь он исправлен –

+0

Я использовал предложенный код, и я избавился от этой ошибки. Спасибо, Мэри – cristian

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