类定义内的“错误:'a'未命名类型”

时间:2019-03-23 07:44:15

标签: c++

所以我只是编写一个使用继承概念的基本程序:

#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;`

请帮助,这是什么意思,我该如何解决?

2 个答案:

答案 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不是键入名称。