2008/7/27

c++ header 建立

現在有兩個class 互相使用對方的指標

我把全部的code 放在同一個檔案是可以編譯的

== 程式碼 ==

class B;

class A
{ 
 B* b;
 A方法的宣告
};

class B
{
 A* a; 
 B方法的宣告
};

A方法的實作
B方法的實作


== 換成.h 後 ==

A.h:
 #pragma once
 #include "B.h"
 class A
 {
  B* b;
  A方法的宣告
 };

B.h:
 #pragma once
 class A;
 class B
 {
  A* b;
  B方法的宣告
 };

A.cpp:
 #include "A.h"
 A方法的實作

B.cpp: 
 #include "B.h"
 B方法的實作

====

標頭檔編譯不能的錯誤訊息是:使用未定義的型別 A

請問該如何修改才能使標頭檔順利編譯?

PS:A方法會呼叫B方法或屬性
  B方法會呼叫A方法或屬性

====

解決方法1 by LPH66:
 在.cpp中兩個.h都#include進來

解決方法2 by adrianshum (Alien):
 a.h:
 #pragma once
 class B; //forward declaration
 #include "b.h"
 class A {
  private:
  B* b;
 };
 
 b.h:
 #pragma once
 class A; //forward declaration
 #include "a.h"
 class B {
  private:
  A* a;
 };

沒有留言: