類模板相互引用的問題(錯誤:缺少類型說明符-假定為int。注意:C++不支持默認int)


問題描述:


現在有兩個模板類(頭文件A.h為1~14行,頭文件B.h為15~27行):

  1: ///////////////////////////////////////////
  2: // file A.h
  3: //
  4: #include "B.h"
  5: 
  6: template <class T>
  7: class A
  8: {
  9: public:
 10:     T a;
 11:     B b_ptr;
 12:     A(): a(0), b_ptr(NULL) {}
 13: };
 14: 
 15: ///////////////////////////////////////////
 16: //file B.h
 17: //
 18: #include "A.h"
 19: 
 20: template <class T>
 21: class B
 22: {
 23: public:
 24:     T b;
 25:     A a_ptr;
 26:     B(): b(0), b_ptr(NULL) {}
 27: };

此處編譯會報如下錯誤:

error C4430:缺少類型說明符-假定為int。注意:C++不支持默認int

error C2143:語法錯誤:缺少“,”(在”<”的前面)


解決辦法:

在A.h中對類B進行前向聲明,在B.h中對類A進行前向聲明,如下代碼所示(代碼7~8行和25~26行):

  1: ///////////////////////////////////////////
  2: // file A.h
  3: //
  4: #include "B.h"
  5: 
  6: // forward statement
  7: template <class T>
  8: class B;
  9: 
 10: template <class T>
 11: class A
 12: {
 13: public:
 14:     T a;
 15:     B b_ptr;
 16:     A(): a(0), b_ptr(NULL) {}
 17: };
 18: 
 19: ///////////////////////////////////////////
 20: //file B.h
 21: //
 22: #include "A.h"
 23: 
 24: // forward statement
 25: template <class T>
 26: class A;
 27: 
 28: template <class T>
 29: class B
 30: {
 31: public:
 32:     T b;
 33:     A a_ptr;
 34:     B(): b(0), b_ptr(NULL) {}
 35: };

關鍵詞:

前向聲明, 模板類

E-mail:www.lxl1965@hotmail.com


免責聲明!

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



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