0

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ヘッダーファイルを含めると問題は解決しますが、私は疑問に思います:

  1. QDateコンパイラは、他のクラスについては文句を言わないのに、クラスについてだけ文句を言うのはなぜですか? QDateこの問題に関連してクラ​​スで何か特別なことはありますか?
  2. QDateクラスを前方宣言するにはどうすればよいですか?
4

1 に答える 1