Search code examples
c++qcc

Variable has incomplete type in class definition?


I've got this class definition in a .h file, and the implementation in a .cpp file. When I try to compile this, the header file gives some errors and warnings:

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

The code in which this error occurs is:

#ifndef _APEXLOADER_H
#define _APEXLOADER_H

#include "global.h"

class APEX_EXPORT ApexLoader
{

public:
    int Load( int argc, char *argv[]);

};

#endif

With the "class APEX_EXPORT ApexLoader" being the line with the error and the warning.

The APEX_EXPORT is defined in a header file that is included from this same file.

EDIT: The APEX_EXPORT is defined in "global.h" as follows:

#ifdef APEX_MAKEDLL
    #define APEX_EXPORT APEX_EXPORT_DECL
#else
    #define APEX_EXPORT APEX_IMPORT_DECL
#endif

Does anyone know why these errors are there? And how can I get rid of them? Thank you in advance!

Compiler: gcc 4.8.4 OS: Ubuntu 14.04


Solution

  • My psychic debugging skills tell me that APEX_EXPORT isn't #defined and thus the compiler thinks you're trying to declare a variable of that type.

    If you think you've included all the right headers the best way to go is to just run the preprocessor on your source file and see what it generates (for example g++ -E).