Bonsoir,
Je souhaitais apprendre à manipuler les espaces de nommage car c'est une notion que je n'avais guère abordée jusqu'ici. Pour ce faire, je me suis lancé dans le codage d'un analyseur de spectre fréquentiel via la méthode FFT.
Tout d'abord j'ai créé un fichier en-tête fftsa.h pour mon espace de nommage. Voici le code qu'il contient:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| #ifndef FFTSA_H
#define FFTSA_H
namespace FFTSA{
//Constants
//Light
const double lowestMicrowaveFrequency = 300000000.0f; //300 MHz
const double highestMicrowaveFrequency = 300000000000.0f; //300 GHz
const double lowestIRLightFrequency = 300000000000.0f; //300 GHz
const double highestIRLightFrequency = 405000000000000.0f; //405 THz
const double lowestHumanlyVisibleLightFrequency = 405000000000000.0f; //405 THz (red)
const double highestHumanlyVisibleLightFrequency = 790000000000000.0f; //790 THz (violet)
const double lowestUVLightFrequency = 790000000000000.0f; //790 THz
const double highestUVLightFrequency = 30000000000000000.0f; //30 PHz
const double lowestXRayFrequency = 30000000000000000.0f; //30 PHz
const double highestXRayFrequency = 30000000000000000000.0f; //30 EHz
const double lowestGammaRayFrequency = 30000000000000000000.0f; //30 EHz
//Sound
const double lowestHumanlyAudibleSoundFrequency = 16.0f;
const double highestHumanlyAudibleSoundFrequency = 20000.0f;
//Classes
class Engine;
}
#endif // FFTSA_H |
Comme vous avez pu le constater, cet espace contient le prototype d'une nouvelle classe, la classe Engine. J'ai choisi de la définir dans les fichiers fftsa_engine.h et fftsa_engine.cpp qui lui sont propres. Voici leur contenu:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| #ifndef FFTSA_ENGINE_H
#define FFTSA_ENGINE_H
#include <QObject>
#include "fftsa.h"
class FFTSA::Engine : public QObject
{
Q_OBJECT
public:
Engine();
virtual ~Engine();
};
#endif // FFTSA_ENGINE_H |
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include "fftsa_engine.h"
using namespace FFTSA;
Engine::Engine() :
QObject(0)
{
}
Engine::~Engine()
{
} |
Rien de faramineux, je vous l'accorde. Ensuite j'ai décidé de tester ce peu de code avec le petit fichier source main.cpp suivant.
1 2 3 4 5 6 7 8 9 10
| #include <QApplication>
#include "fftsa.h"
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
FFTSA::Engine engine;
return app.exec();
} |
Et là, c'est le drame: ça ne compile pas. Outre le fait que j'obtiens un avertissement à cause de l'objet engine, le compilo me renvoie l'erreur suivante:
aggregate 'FFTSA::Engine engine' has incomplete type and cannot be defined
Malgré mes recherches sur Google, je ne parviens pas à comprendre le problème, ni à le résoudre; c'est pourquoi, je demande votre aide.
Merci d'avance.
Adishatz!
PS: J'utilise la bibliothèque logicielle Qt 4.8.1, mais il me semble que ce problème ne vient pas de là.
Partager