Ошибка: ожидаемый идентификатор перед "public", ожидаемый "{" перед "public"

Я получаю эту странную ошибку, которую не могу устранить.

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 ответа

Вы должны объявить конструктор BaseClass public, Таким образом, члены класса доступны из любого места, где виден объект, например:

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

Все члены данных класса установлены как private по умолчанию, поэтому они доступны только из других членов того же класса или от их друзей.

Как отметил Ивайло Странджев в комментариях, конструкция может быть установлена ​​как protected так как

защищенные члены доступны от членов их же класса и от их друзей, но также и от членов их производных классов.

По умолчанию члены являются частными, сделать

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

    char ivHow[512];
};
Другие вопросы по тегам