错误:'public'之前的预期标识符,'public'之前的'{''

时间:2013-09-18 12:11:22

标签: c++ inheritance constructor compiler-errors

我遇到了这个奇怪的错误,我无法解决。

class BaseClass
{
    public:BaseClass(const char* aHow = NULL)
    {
        std::strcpy(ivHow,aHow);
    }

    char ivHow[512];
};

class DerivedClass : public BaseClass
{
    DerivedClass (const char* dcHow):BaseClass (dcHow){}
};

我收到以下错误:

../trunk/inc/Sample.h: In constructor ‘DerivedClass::DerivedClass(const char*)’:
../trunk/inc/Sample.h: error: expected identifier before ‘public’
../trunk/inc/Sample.h: error: expected ‘{’ before ‘public’

2 个答案:

答案 0 :(得分:4)

您必须声明BaseClass public的构造函数。通过这样做,可以从对象可见的任何地方访问类的成员,如:

class BaseClass
{
    public: // or protected
    BaseClass(const char* aHow = NULL)
    {
    std::strcpy(ivHow,aHow);
    }
};

默认情况下,班级的所有数据成员都设置为private,因此只能从同一班级的其他成员或friends中访问这些成员。

正如Ivaylo Strandjev在评论中指出的那样,构造可以设置为protected,因为

  

受保护的成员可以从同一个类的成员和他们的朋友访问,也可以从他们派生类的成员访问。

答案 1 :(得分:1)

默认情况下,成员是私有的,执行

class BaseClass
{
    protected: //or public
    BaseClass(const char* aHow = NULL)
    {
        std::strcpy(ivHow,aHow);
    }

    char ivHow[512];
};