2016-06-01 4 views
1

Ich habe eine Klasse definiert in Executer.hpp und Executer.cpp aufgeteilt.C++ - Eclipse - Organisieren include

In Executer.hpp ist der Code:

static std::unique_ptr<Executer> mInstance; 
static std::once_flag mOnceFlag; 

In Executer.cpp ist der Code:

std::unique_ptr<Executer> Executer::mInstance; 
std::once_flag Executer::mOnceFlag; // without this apparently 
    // useless line of code, the program using this shared lib 
    // claims: undefined reference to `Executer::mOnceFlag' 

Danach versuche ich Eclipse zu lassen meine Importe organisieren.

Was ich erhalte, ist:

//------------------------------- Executer.hpp 
#include <memory> 
#include <stdexcept> 
#include <string> 

namespace std { 
struct once_flag; 
} /* namespace std */ 
//------------------------------- Executer.cpp 
#include "Executer.hpp"  
#include <mutex> 

Was erwarte ich (und auch richtig kompiliert wird):

//------------------------------- Executer.hpp 
#include <memory> 
#include <mutex> 
#include <stdexcept> 
#include <string> 
//------------------------------- Executer.cpp  
#include "Executer.hpp"  
  1. Warum Eclipse-auf diese Weise verhält?
  2. Kann ich konfigurieren Eclipse so, dass ich meinen Weg der Organisation der umfasst (I die vielen Möglichkeiten gesehen haben, aber ich habe Dinge schlimmsten)

Antwort

0

Warum Eclipse dass verhält sich Weg?

Der Typ eines statischen Datenelements muss zum Zeitpunkt der Deklaration des Datenelements nicht vollständig sein. Das heißt, die Deklaration wird mit dem Typ kompiliert, der gerade nach vorne deklariert wurde, nicht definiert.

Die Standardeinstellungen für "Organize Includes" versuchen, die Anzahl der Header in anderen Headern zu minimieren, um die Kompilierungszeiten zu verkürzen. Wenn also eine Vorwärtsdeklaration eines Typs ausreicht, wird lieber eine erstellt um den Header einzuschließen, als den Typ zu definieren.

Kann ich konfigurieren Eclipse-so, dass ich mir aus dem Weg zu organisieren, die umfasst (Ich habe die vielen Möglichkeiten gesehen, aber ich habe Dinge schlimmsten)

Entmarkieren Forward declare classes, structs and unions in Preferences | C/C++ | Code Style | Organize Includes sollten Sie geben das Verhalten, das du wünschst.