2012-02-16 3 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을 선언했지만 정의하지 마십시오.

마지막으로 std::memset 선언에 <cstring>을 포함해야합니다. 다른 헤더에 간접적으로 포함될 수도 있지만 그 것에 의존 할 수는 없습니다.

비 -POD 객체를 덮어 쓸 때 memset을 사용하는 것은 유효하지 않으므로 정의되지 않은 런타임 동작이 발생합니다. Foo에는 가상 기능이 있으므로 POD가 아닙니다.

+0

케이스 오류를 수정했지만 여전히 컴파일 중 일부 링커 오류가 발생합니다. 내가 사용하고있는 memset 코드 때문인가? 설명해 주시겠습니까? 또한 클래스 X에서 Fun1() {cout << "LOL";}을 정의했지만 컴파일 오류가 발생했습니다. – Invictus

+0

'Foo :: Fun1'을 정의했다면 링크 오류가 없어야합니다. 오류가 정확히 무엇입니까? –

+0

[링커 오류] 'Foo 용 vtable'에 대한 정의되지 않은 참조 – Invictus

2

Classclass이어야합니다.

0

Class X의 이름은 C로 명명됩니다. 이것은 문제입니다.

1

Class X: public Fooclass X: public Foo이어야하며 두 가지 오류를 모두 수정해야합니다.

1

C++ 언어는 대소 문자를 구분하며 해당 키워드는 소문자로 작성해야합니다. class은 유효한 C++ 키워드이지만 Class은 아닙니다.

0

귀하의 오류가 정말 시작 클래스 X를 선언 할 때 class-Class의 이름을 바꿉니다 Class X: public Foo // Error class does not name a type Classclass해야합니다.

관련 문제