我想下象棋。在上圖中,我將一個指向對象正方形的指針指向它的「位置」,反之亦然:用方形指向數字。問題是這些類的定義在單獨的文件中。當我在figure.cpp,反之亦然,編譯器在顯示用#include的線條,就像寫#include "square.cpp"
許多錯誤:兩個頭文件或源文件互相引用
從[路徑方] [路徑圖】
有什麼辦法使其工作?
我想下象棋。在上圖中,我將一個指向對象正方形的指針指向它的「位置」,反之亦然:用方形指向數字。問題是這些類的定義在單獨的文件中。當我在figure.cpp,反之亦然,編譯器在顯示用#include的線條,就像寫#include "square.cpp"
許多錯誤:兩個頭文件或源文件互相引用
從[路徑方] [路徑圖】
有什麼辦法使其工作?
首先,請注意,您可避免任何應用程序#include
(因此只包括系統頭或外部庫頭),只是複製&粘貼源代碼到幾文件。這將是不方便的。詳細瞭解C preprocessor。請注意,它主要是在處理文本(例如,不太瞭解C++語法或AST)。
然後,傳統,頭文件主要包含聲明(類型,struct
,class
,函數,變量...)和定義static inline
功能(或您的class
-es的inline
成員函數 )。
所以你最好不要#include "square.cpp"
在figure.cpp
源文件,而只是有一個單一的myheader.h
文件與#include "myheader.h"
無論是在你的square.cpp
和你figure.cpp
源文件(即translation units)。
查看更多書籍about C++ programming並研究了一些C++ free software的源代碼, hun7err's Chess和ChessPlusPlus(我不擅長國際象棋程序設計,並通過快速谷歌搜索發現他們兩個)
嘗試添加包括頭衛士:
#ifndef YOURHEADER_H_ //at the start of the file
#define YOURHEADER_H_
// the header contents
#endif //this has to be at the end of the file
這對兩個互相引用的類沒有幫助。 – interjay
谷歌'前向聲明'。永遠不會有包含對方的.h文件。 –
將您的代碼分解爲.h和.cpp文件,並僅包含.h文件。 – interjay
題外話:我很好奇你的設計。爲什麼圖和廣場相互瞭解? – MABVT