Qt Widgets を使用してアプリケーションを開発しています。
私のヘッダー ファイルでは、クラスをインクルードするのではなく、宣言を転送するのが好きです。ヘッダー ファイルの先頭で、次のように宣言を行います。
class QFile;
class QDate;
class QTime;
また、クラスには次のような関数宣言があります。
static bool addGoldTransaction(QFile *transactionsFile, Gold goldType, OperationType transactionType, float price, float amount, QDate date, QTime time);
コンパイルしようとすると、次のようなエラーが発生します。
forward declaration of 'class QDate'
in definition of macro 'QT_FORWARD_DECLARE_STATIC_TYPES_ITER'
in expansion of macro 'QT_FOR_EACH_STATIC_CORE_CLASS'
In file included from moc_transaction.cpp:9:0:
error: initializing argument 6 of 'static bool addGoldTransaction(QFile*, Gold, OperationType, float, float, QDate, QTime)'
他の Qt 関連クラスの前方宣言にはエラーはありません。
QDate
ヘッダーファイルを含めると問題は解決しますが、私は疑問に思います:
QDate
コンパイラは、他のクラスについては文句を言わないのに、クラスについてだけ文句を言うのはなぜですか?QDate
この問題に関連してクラスで何か特別なことはありますか?QDate
クラスを前方宣言するにはどうすればよいですか?