C++ 多目錄多文件編譯 技巧


http://www.cplusplus.com/forum/articles/10627/

 

1.hpp文件

hpp文件可以使用template函數和class靜態函數(不含靜態成員)

a)不可包含全局對象和全局函數
由於hpp本質上是作為.h被調用者include,所以當hpp文件中存在全局對象或者全局函數,而該hpp被多個
調用者include時,將在鏈接時導致符號重定義錯誤。要避免這種情況,需要去除全局對象,將全局函數封
裝為類的靜態方法。
b)類之間不可循環調用
在.h和.cpp的場景中,當兩個類或者多個類之間有循環調用關系時,只要預先在頭文件做被調用類的聲明
即可,如下:
class B;
class A{
public:
void someMethod(B b);
};
class B{
public:
void someMethod(A a);
};
在hpp場景中,由於定義與實現都已經存在於一個文件,調用者必需明確知道被調用者的所有定義,而不能等到cpp
中去編譯。因此hpp中必須整理類之間調用關系,不可產生循環調用。同理,對於當兩個類A和B分別定義在各自的
hpp文件中,形如以下的循環調用也將導致編譯錯誤:
//a.hpp
#include "b.hpp"
class A{
public:
void someMethod(B b);
};
//b.hpp
#include "a.hpp"
class B{
public:
void someMethod(A a);
}

c)不可使用靜態成員
靜態成員的使用限制在於如果類含有靜態成員,則在hpp中必需加入靜態成員初始化代碼,當該hpp被多個文檔include時,將產生符號重定義錯誤。

 

2.

#ifndef MATH_HPP_
#define MATH_HPP_

//內容

#endif

 

3.多個類互相包含使用指針,不要用成員。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM