C++でビルド順序の依存関係に何かが誤解されているようです。私は「使用文句コンパイラエラーを取得していますC++ - ビルド順序と依存関係の問題
#include "Imports.h"
class X: public Y
{
public:
X (T* t) { this->t= t; }
virtual ~X(){}
virtual void draw()
{
if (t->booleanReturningFunction())
{
t->someField.draw();
}
}
T* t;
};
:だから私は、私はfunctionoid(その目的関数ポインタを渡すために置換することであるオブジェクト)として使用するクラスを定義し、このコードを、持っていますそのクラスの定義を含む.H」ファイル:未定義の型Tの「それぞれに
//The goal of this file is to have all the typcally needed imports in one place.
#if !defined(IMPORTS_H)
#define IMPORTS_H
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <iostream>
#include <assert.h>
#include <cmath>
#include <fstream>
class T;
class X;
class Y;
#include "Y.h"
#include "X.h"
#include "T.h"
#endif // if !defined(IMPORTS_H)
私はT.を使用している行番号でしかし、Imports.hは次のようになります」。現在、Tには実際にはXオブジェクト(ポインタではなくXオブジェクト)があります。しかし、私が知る限り、XにはTへのポインタしかないので、ビルド順に循環依存はありません。このコードからちょうど見ることができないものがありますか?助けが大いにありがとう!
編集:私は私の問題を解決しました。問題は、私がヘッダファイルの中で上記のコードを実行していたことでした。コンパイラは順方向参照に基づいてt-> booleanReturningFunction()をコンパイルすることができませんでした(関数呼び出しをバインドするアドレスを知るためにはクラス宣言が必要でした)。
一般に、クラスのすべてのインクルードを1か所にまとめたくない場合は、それはあなたのプロジェクトを非常に扱いにくいものにします。 –
私はそれを理解していますが、これはこのプロジェクトがすでにどのように行われているかであり、絶対に必要な場合を除き、現時点でそれを再加工する気がしません。私は離れて行かなければならない特定のエラーがほしいだけです。 – Gravity