2011-07-04 42 views
4

當我編譯我的項目在C++中,下面的誤差由MSVC拋出:關於錯誤

錯誤#94:陣列的大小必須大於零

該錯誤是在下面的行拋出做的sizeof:

if (sizeof (MyNamespace::MyClass) == 60) 

MyClass的被這樣定義:

class MyClass: public ParentClass 
{ 
    public: 
     MyClass(void *pCreate, int a, int b, bool c) : 
       ParentClass(pCreate, a, b, c) {} 

     virtual inline void myFunc () 
     { 
      //something 
     } 
    private: 
     virtual ~MyClass(){}; 

     /** 
     * Copy assignment. Intentionally made private and not implemented to prohibit usage (noncopyable stereotype) 
     */ 
     MyClass& operator=(const MyClass&); 
}; 

有誰能告訴我什麼可能是錯的?即使sizeof返回零大小,爲什麼它是一個編譯器錯誤?

+1

在ParentClass中是否有一個數組? –

+2

每個類的大小必須至少爲字節,即使它是空的,以便將它的2個成員(例如在數組中的0)分開(如果它在0處,它們將得到相同的地址)。這個錯誤是否出現在這條線上? – Nobody

回答

10

此錯誤是由於當時只有宣稱爲的類別的sizeof引起的。例如。 class MyClass; const size_t error = sizeof(MyClass);

請注意,以後是否完全定義類別無關緊要:定義必須位於sizeof之前。

+0

多麼愚蠢的診斷! –

2

此錯誤很可能是由前向聲明引起的。在你使用sizeof的那一行,編譯器需要知道你的類MyClass的定義,那就是你必須#included頭文件爲它