これはかなり基本的な質問ですが、私自身はネームスペースを決して定義していません。 Qtベースのライブラリのクラスをさまざまな名前空間にグループ化しようとしています(また、名前の競合のない拡張が容易です)。C++ネームスペース - ネストされたネームスペースの前方宣言と可視性
namespace lib {
class LibClass;
}
このLibClass
はに含まれている他のヘッダファイルに定義されている他の名前空間とクラスの束を使用する:(たとえば、図書を表す)メインクラスは、トップレベルの名前空間lib
に属しLibClass
のヘッダ:と
#include <QObject>
#include "libclass_global.h"
#include "Manager.h"
#include "Configurator.h"
namespace lib {
class LibClass;
}
class LIBCLASSSHARED_EXPORT LibClass : public QObject {
public:
LibClass();
...
signals:
...
private slots:
...
public slots:
...
private:
lib::core::communication::Manager manager; // PROBLEM HERE
lib::core::communication::Configurator configurator; // PROBLEM HERE
}
Manager.h
namespace lib {
namespace core {
namespace communication {
class Manager;
}
}
}
class Manager {
public:
Manager();
...
private:
...
}
を含みます
namespace lib {
namespace core {
namespace communication {
class Configurator;
}
}
}
class Configurator {
public:
Configurator();
...
private:
...
}
クラスの内容を含む
とConfigurator.hは、ここでは重要ではありません。
コンパイルすると、q3dtp
の名前空間にcore
という名前空間にタイプがありません。だから、基本的に私は名前空間が実際に(何らかの理由で)それらが含まれているヘッダファイルの挿入に含まれていないようですので、私のLibClass
のヘッダに宣言を前方に使用する必要があります理解して何から:
namespace lib {
class LibClass;
namespace core {
namespace communication {
class Manager;
class Configurator;
}
}
}
その問題は、私がポインタ宣言に限定しているのは、Manager
とConfigurator
を前方宣言しているからです。私は可能な限り(必要ではない)動的に要素を割り当てるのを避けたい。
ここで問題はどのように私はこの問題を解決するのですか?私は明らかにすべてのクラス宣言を同じヘッダとその定義に同じソースファイルに移すことができます。しかし、これは将来的に維持することをむしろ困難にするでしょう。サブネームスペースを宣言するだけでは問題は解決しないようです - どちらのクラスもタイプを指定せず、さらにLibClass
にはメンバー名<name_of_class_from_nested_namespace>
がありません。