所以我只是编写一个使用继承概念的基本程序:
#include <iostream>
using namespace std;
class base
{
public:
int a;
a = 100;
};
class derived:public base
{
public:
void display()
{
cout << "Value of a is " <<a;
}
};
int main()
{
derived d;
d.display();
return 0;
}
错误说:
error: 'a' does not name a type
a = 100;`
请帮助,这是什么意思,我该如何解决?
答案 0 :(得分:2)
此行是错误的:
a = 100;
您无法在此处初始化a
。您可以在上一行(假设使用C ++ 11或更高版本)中对其进行初始化:
int a = 100;
答案 1 :(得分:1)
对于C ++的初学者来说,该错误消息不是特别有用,但是其原因是,在类或结构定义中,有许多事情无法完成。允许声明类型,声明成员或成员函数。不允许分配给变量或类成员。
仅执行赋值的语句(如a = 100
)可以出现在函数的主体中,而不能出现在类定义中(除非在内联函数的主体中)。
您可以在内联成员函数(例如
)中分配给类或结构的成员class base
{
public:
int a;
void some_member_function() {a = 100;}; // inline function definition
};
在C ++ 11和更高版本中,可以在声明它的位置初始化成员。
class base
{
public:
int a = 100;
};
但是,尽管它看起来像是一个赋值(外观类似语法),但实际上它是int
成员a
的声明和初始化(与赋值有所不同)。如果没有前面的int
关键字(或其他适当类型的名称),则a = 100
无效。如果您考虑了这一点,则可能可以解释编译器为何给出错误消息的原因-当编译器看到令牌a
时,它通常希望看到类型名称,而a
不是键入名称。