c 中標頭檔案的相互依賴引發的問題

2021-09-02 08:20:22 字數 1571 閱讀 9106

先上**:摘自essential c++

triangular.h

#include "triangular_iterator.h"

class triangular

;

triangular_iterator.h

#include "triangular.h"

class triangular_iterator

;inline int triangular_iterator::operator * () const

error

error: 'triangular' has not been declared|
原因:標頭檔案的相互依賴

去掉triangular_iterator.h中的#include 「triangular.h」產生同樣的錯誤。

想一下先把triangular.h檔案中的#include "triangular_iterator.h"展開

​#ifndef triangular_h

#define triangular_h

#ifndef triangular_iterator_h

#define triangular_iterator_h

#include "triangular.h"

class triangular_iterator

;inline int triangular_iterator::operator * () const

#endif

class triangular

;#endif

因為使用了條件編譯,所以此時**中的#include "triangular.h"檔案不會再被編譯。

那麼在解引用函式中

return triangular::elems[index];
自然會報錯找不到triangular

解決方案:

1.在.cpp檔案中定**引用操作符,包含#include "triangular.h"檔案

triangular_iterator.cpp

#include "triangular_iterator.h"

#include "triangular.h"

int triangular_iterator::operator * () const

2.在triangular類的定義後面定**引用符,並宣告為inline

triangular.h

#include "triangular_iterator.h"

class triangular

;inline int triangular_iterator::operator * () const

在標頭檔案裡面定義乙個函式要宣告為inline,否則會產生重定義的錯誤,所以在類內部定義的成員函式都是inline的。

C C 中標頭檔案相互包含引發的問題

今天下午遇到乙個標頭檔案相互包含而導致的編譯問題,花了我不少時間去除錯沒找到問題,最後晚上跟師兄討論不少時間,突然有所頓悟!我把問題脫離於專案簡單描述一下 我寫了乙個函式bool func classa ca 需要加到專案中,我就把這個函式的宣告放到head1.h中,函式引數型別 classa 定義...

C C 中標頭檔案相互包含引發的問題

今天下午遇到乙個標頭檔案相互包含而導致的編譯問題,花了我不少時間去除錯沒找到問題,最後晚上跟師兄討論不少時間,突然有所頓悟!我把問題脫離於專案簡單描述一下 我寫了乙個函式bool func classa ca 需要加到專案中,我就把這個函式的宣告放到head1.h中,函式引數型別 classa 定義...

C C 中標頭檔案相互包括引發的問題

今天下午遇到乙個標頭檔案相互包括而導致的編譯問題,花了我不少時間去除錯沒找到問題。最後晚上跟師兄討論不少時間,突然有所頓悟!我把問題脫離於專案簡單描寫敘述一下 我寫了乙個函式bool func classa ca 須要加到專案中,我就把這個函式的宣告放到head1.h中,函式引數型別 classa ...