编译此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;
}
答案 0 :(得分:2)
Class
应为class
。
答案 1 :(得分:2)
关键字class
以小写c
开头。这将修复您报告的错误,但仍会有更多错误。
您声明Foo::Fun1
,但不要定义它。
最后,您需要在<cstring>
的声明中加入std::memset
。另一个标题可能是间接包含它,但你不能依赖它。
您将拥有未定义的运行时行为,因为使用memset
覆盖非POD对象无效 - Foo
具有虚函数,因此不是POD。
答案 2 :(得分:1)
Class X: public Foo
应为class X: public Foo
,这应该可以解决这两个错误。
答案 3 :(得分:1)
C ++语言区分大小写,并且要求其关键字以小写形式编写。 class
是有效的C ++关键字,但Class
不是。在声明X类时,将Class
重命名为class
。
答案 4 :(得分:0)
Class X
以大写字母C命名。这就是问题所在。
答案 5 :(得分:0)
您的错误实际上始于:
Class X: public Foo // Error class does not name a type
Class
必须为class
。