2012-02-16 454 views
1

編譯此C++代碼時出現以下錯誤。這背後的原因是什麼?編譯此C++代碼時出錯

 # include <iostream> 
    # include <stdio.h> 
    # include <conio.h> 

    using namespace std; 

    class Foo 
    { 
     int a; 
     public : 
     virtual void Fun1(); 

     Foo() 
     {a=5;} 
    }; 

    Class X: public Foo // Error class does not name a type 
    { 
     Foo f; 
     public: 
     void Fun1() { }  
     X() 
     { 
     memset(&f,0x0,sizeof(f)); 
     } 
    }; 

    int main() 
    { 
     X x; // Error 'X undeclared and expected ; before x, i guess because of first one 
     getch(); 
     return 0; 
     } 

回答

2

關鍵字class以小寫字母c開頭。這將解決您報告的錯誤,但仍然存在更多錯誤。

您聲明Foo::Fun1,但沒有定義它。

最後,您需要包含<cstring>以申報std::memset。有可能另一個頭文件間接包含它,但你不能依賴它。

然後,您將有未定義的運行時行爲,因爲使用memset覆蓋非POD對象無效 - Foo具有虛擬功能,因此不是POD。

+0

我糾正了大小寫錯誤,但仍編譯時,我得到了一些鏈接錯誤。這是由於我正在使用的memset代碼?你能解釋一下嗎?我還在類X中定義了Fun1(){cout <<「LOL」;},但仍然存在編譯錯誤。 – Invictus 2012-02-16 17:33:36

+0

如果您定義了'Foo :: Fun1',則不應該存在鏈接錯誤。什麼是錯誤? – 2012-02-16 17:35:39

+0

[鏈接器錯誤]對'foo for Foo'的未定義引用 – Invictus 2012-02-16 17:40:42

0

Class X以大寫字母C命名。這是問題所在。

1

Class X: public Foo應該是class X: public Foo,它應該解決這兩個錯誤。

1

C++語言區分大小寫,並且需要將其關鍵字寫成小寫字母。 class是有效的C++關鍵字,但Class不是。聲明類X.

0

你的錯誤真的與啓動時重命名ClassclassClass X: public Foo // Error class does not name a type Class必須class