У меня есть это определение класса в файле .h, а реализация в файле .cpp. Когда я пытаюсь скомпилировать это, файл заголовка выдает некоторые ошибки и предупреждения:
/home/don/BerthaApex/apex/src/lib/apexmain/apexloader.h:6: error: variable 'APEX_EXPORT ApexLoader' has initializer but incomplete type
class APEX_EXPORT ApexLoader
^
/home/don/BerthaApex/apex/src/lib/apexmain/apexloader.h:6: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]
/home/don/BerthaApex/apex/src/lib/apexmain/apexloader.h:9: error: expected primary-expression before 'public'
public:
Код, в котором возникает эта ошибка:
#ifndef _APEXLOADER_H
#define _APEXLOADER_H
#include "global.h"
class APEX_EXPORT ApexLoader
{
public:
int Load( int argc, char *argv[]);
};
#endif
При этом «class APEX_EXPORT ApexLoader» — строка с ошибкой и предупреждением.
APEX_EXPORT определен в заголовочном файле, который входит в этот же файл.
РЕДАКТИРОВАТЬ:
APEX_EXPORT определяется в «global.h» следующим образом:
#ifdef APEX_MAKEDLL
#define APEX_EXPORT APEX_EXPORT_DECL
#else
#define APEX_EXPORT APEX_IMPORT_DECL
#endif
Кто-нибудь знает, почему эти ошибки есть? И как я могу от них избавиться?
Заранее спасибо!
Компилятор: gcc 4.8.4
ОС: Ubuntu 14.04
Мои психические навыки отладки говорят мне, что APEX_EXPORT
не #define
d и, следовательно, компилятор думает, что вы пытаетесь объявить переменную этого типа.
Если вы думаете, что включили все правильные заголовки, лучший способ — просто запустить препроцессор в вашем исходном файле и посмотреть, что он генерирует (например, g++ -E
).