2013-04-25 27 views
8

我自己編寫的代碼:如何實現可以訪問對方的兩個結構?

struct A; 
    struct B; 
    struct A 
    { 
     int v; 
     int f(B b) 
     { 
      return b.v; 
     } 
    }; 

    struct B 
    { 
     int v; 
     int f(A a) 
     { 
      return a.v; 
     } 
    }; 

的編譯消息:

|In member function 'int A::f(B)':| 
11|error: 'b' has incomplete type| 
7|error: forward declaration of 'struct B'| 
||=== Build finished: 2 errors, 0 warnings (0 minutes, 0 seconds) ===| 

我知道,爲什麼那個代碼是不正確的,但我不知道如何實現這兩個結構,可以互相訪問。有沒有優雅的方式?提前致謝。

+0

我把它重新標記爲C++,因爲它不是C. – unwind 2013-04-25 09:03:11

回答

16

如果你想保持你的成員函數完全相同的簽名,你不得不推遲的成員函數的定義,直到兩個類定義已經看到

// forward declarations 
    struct A; 
    struct B; 

    struct A 
    { 
     int v; 
     int f(B b); // works thanks to forward declaration 
    }; 

    struct B 
    { 
     int v; 
     int f(A a); 
    }; 

    int A::f(B b) { return b.v; } // full class definition of B has been seen 
    int B::f(A a) { return a.v; } // full class definition of A has been seen 

您還可以使用const&函數的參數(當AB很大時,性能會更好),但即使如此,也必須推遲函數定義,直到看到兩個類定義。

+1

我只是指出像'const A&a'這樣的東西存在。 – Vyktor 2013-04-25 09:15:14

+0

你是唯一一個聲明指針不是必需的,我測試你的代碼,工作!你是C++的專家! – Sayakiss 2013-04-25 09:17:39

+0

@Vyktor tnx,我爲此添加了一個句子。 – TemplateRex 2013-04-25 09:17:54

相關問題