2012-02-16 2 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, который я использую? Вы можете это объяснить. Я также определил Fun1() {cout << "LOL";} в классе X, но все же ошибку компиляции. – Invictus

+0

Не должно быть ошибки ссылки, если вы определили 'Foo :: Fun1'. Что такое ошибка? –

+0

[Ошибка компоновщика] undefined ссылка на 'vtable for Foo ' – Invictus

0

Class X назван с капиталом C. Это проблема.

1

Class X: public Foo должно быть class X: public Foo, которое должно исправить обе ошибки.

1

Язык C++ чувствителен к регистру и требует, чтобы его ключевые слова были записаны в нижнем регистре. class действительно C++ ключевое слово, но Class нет. Переименовать Class в class при объявлении класса X.

0

Ваша ошибка действительно начинается с: Class X: public Foo // Error class does not name a type Class должен быть class.

Смежные вопросы