2013-07-31 66 views
0

我正在處理鏈接到C庫的C++項目。我的C++類如下:創建對象時出現「未定義的結構體」錯誤

extern "C" { 
    struct __struct1__; 
    struct __struct2__; 
    struct __struct3__; 
    struct __struct4__; 
} 

namespace mynamespace { 
    class MyClass : public Parent { 
    public: 
      .... 

    private: 
      .... 

      __struct1__* s1; 
      __struct2__* s2; 
      struct __struct3__ s3; 
      struct __struct4__ s4; 
    }; 
} 

創建類似s1和s2的指針時,一切正常。但物體不能很好地工作。生成以下錯誤:使用未定義的結構

我怎樣才能創建像S3和S4對象

錯誤?

+4

確保'__struct4__'具有完整的定義,而不僅僅是一個聲明。如果沒有告訴編譯器,編譯器應該知道進入「__struct4__」的內容!? – StoryTeller

+0

[未定義的C結構向前聲明]的可能的重複(http://stackoverflow.com/questions/621356/undefined-c-struct-forward-declaration) – 2013-07-31 11:49:23

+1

編譯器總是知道指針的大小(所以它將永遠是能夠創建一個指針)。編譯器從不知道用戶定義類型的大小,除非它的定義已經被滿足(這裏,你沒有爲s3和s4定義類型,因此編譯器不知道如何處理它們)。 – Nbr44

回答

2

變量:

__struct1__ *s1 

僅僅是類型的指針(你的結構,但仍然只是一個指針),所以編譯器知道到底有多少堆棧這個變量需要記憶。但如果是:

__struct3__ s3 

這個變量的類型是__struct3__,所以沒有完整的定義編譯器不知道它的大小。

相關問題