2015-09-01 2 views
-1

У меня есть это определение класса в файле .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 

С «класса APEX_EXPORT ApexLoader» является линия с ошибки и предупреждения.

APEX_EXPORT определен в файле заголовка, который включен в этот же файл.

EDIT: 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

+0

И как выглядят линии * перед классом? Что такое 'APEX_EXPORT'? Нет другого символа «ApexLoader» (например, как макрос препроцессора)? –

+0

Где указано APEX_EXPORT? Если это в другом файле, вы включаете этот файл в свой файл заголовка? –

+0

Вы не определили макрос 'APEX_EXPORT', поэтому он выглядит как объявление переменной типа' class APEX_EXPORT' под названием «ApexLoader». Точно такие же ошибки [здесь] (http://ideone.com/A9Pc6M). – molbdnilo

ответ

8

Мои психические навыки отладки сказать мне, что APEX_EXPORT не #define d и, таким образом, компилятор считает, что вы пытаетесь объявить переменную этого типа.

Если вы считаете, что включили все правильные заголовки, лучше всего запустить препроцессор в исходном файле и посмотреть, что он генерирует (например, g++ -E).

+0

Вы были правы, это не было определено из-за следующей ошибки: он был определен в файле global.h в моем проекте, но я также включил другую папку, в которой также был другой файл global.h. Установите правильную папку с включенным содержимым, и все это сработало :) – DrDonut

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