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:
Code fftsa.h : Sélectionner tout - Visualiser dans une fenêtre à part
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:
Code fftsa_engine.h : Sélectionner tout - Visualiser dans une fenêtre à part
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
Code fftsa_engine.cpp : Sélectionner tout - Visualiser dans une fenêtre à part
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.
Code main.cpp : Sélectionner tout - Visualiser dans une fenêtre à part
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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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à.