當我往工程裡加一個類,而且那個類又與工程裡的類相關,如有那個類型的成員變量。情況如下
//////A.h/////////// class A { ....... }; ////////B.h////////// class B:A { .... A member; } 結果,編譯就會出錯,說找不到類形A。解決的辦法是在B.h裡#include “A.h”。但是有時候不用#include “A.h”,只要在classB:A前加class A;就可以了。更嚴重的是不但要#include “A.h”,還要class A;。 起初覺得沒問題,因為這樣搞來搞去總會編譯通過的,而且不會讓程序變大,因為有#ifndef...#endif和#pragma once控制。直到有一次,我需要那些常量放到一個文件中“const.h”,然後include到其它需要它的類中,結果怎麼也編譯不成功(因為文件多了,而且每個文件都這樣互相include,把我也蒙了) 直到今天終於從《Effective C++》裡找到原理。現向大家分享一下,首先我以下面這個類結構作例子。(先不管我為什麼不加一個Woman,為什麼Man就有child,我只是作例子解說,絕沒有性別歧視。 代碼如下: ////////////main.h////////////// #include "stdafx.h" #include "man.h" int main(){ Man m; return 0; } ////////////Person.h///////////// #pragma once class Person { public: Person(void); ~Person(void); }; ////////Person.cpp/////////// #include "StdAfx.h" #include ".person.h" Person::Person(void){ } Person::~Person(void){ } /////////Man.h/////////// #pragma once #include "person.h" class Man : public Pe