我似乎誤解了與在C++中構建順序依賴關係有關的東西。所以我有這樣的代碼,它定義了我作爲一個functionoid(對象,其目的是爲了替代傳遞一個函數指針)使用類: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;
};
我收到抱怨的「使用編譯器錯誤未定義類型T的「在這裏我使用T.然而,行號,Imports.h樣子:
//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)
,每個」包含類的定義.H」文件。現在T實際上有一個X對象(不是指針,而是X對象)。但是,據我所知,構建順序中沒有循環依賴關係,因爲X只有一個指向T的指針,對吧?有什麼我錯過了,你可以從這個代碼中看到嗎?非常感謝幫助!
編輯:我解決了我的問題。問題是我在一個頭文件中做了上面的代碼。編譯器可以理解,無法根據前向引用編譯t-> booleanReturningFunction()(它需要查看類聲明以知道綁定函數調用的地址)。
一般來說,你不希望你所有的課程包含在一個地方。它會讓你的項目非常難以管理。 –
我明白,但這是這個項目已經是如此,除非絕對必要,否則我不想在現在重做它。我只想要我不得不離開的具體錯誤。 – Gravity