Доступ к родителю и его родителю - PullRequest
0 голосов
/ 14 мая 2018

У меня возникают трудности с тем, чтобы дочерний класс мог ссылаться на своего родителя.Вот свежий и более простой пример кода:

class AlphaClass {
public:
    AlphaClass(){}
    ~AlphaClass(){}
    void init() {
        alpha++;
    }
    int alpha = 0;
};

class BetaClass : public AlphaClass {
public:
    void init() {
        beta++;
        alpha++;
    }
    int beta = 0;
};

Вывод компилятора:

Severity    Code    Description Project File    Line
Warning     In file included from       D:\Documents\Arduino\DesendentTest\Beta.cpp 5
Error       14:1: error: expected class-name before '{' token       D:\Documents\Arduino\DesendentTest\Beta.h   14
Error       19:4: error: 'alpha' was not declared in this scope     D:\Documents\Arduino\DesendentTest\Beta.h   19
Warning     In member function void BetaClass::init()       D:\Documents\Arduino\DesendentTest\Beta.h   -1
Warning     alpha++         

1 Ответ

0 голосов
/ 14 мая 2018

Проблема проистекает из абстрактных конструкторов и деструкторов.Когда я удалил все "виртуальные" ключи, все работает нормально:

class FooBar {
    public:
        char foobar[7] = { 'f','o','o','b','a','r' };   //  Should be publically visible
        FooBar() {
            Serial.println("\nConstructing FooBar");
        }
        void begin() {
            Serial.println("\nFrom FooBar:");
            Serial.print("foobar=");
            Serial.println(foobar);
        }
    };

    class Foo : public FooBar {
    public:
        const char foo[4] = { 'f','o','o' };

        Foo() {
            Serial.println("\nConstructing Foo");
        }

        void begin() {
            Serial.println("\nFrom Foo:");

            Serial.print("foo=");
            Serial.println(foo);

            Serial.print("FooBar=");
            Serial.println(FooBar::foobar);
        }

    };

    class Bar : public Foo {
    public:
        const char bar[4] = { 'b', 'a', 'r' };

        Bar() {
            Serial.println("\nConstructing Bar");
        }

        void begin() {
            Serial.println("\nFrom Bar:");

            Serial.print("bar=");
            Serial.println(bar);

            Serial.print("foo=");
            Serial.println(foo);

            Serial.print("FooBar=");
            Serial.println(foobar);
        }
    };

    FooBar *foobar;
    Foo *foo;
    Bar *bar;

    void setup() {
        Serial.begin(115200);
        Serial.println("Beginning...");

        foobar = new FooBar();
        foo = new Foo();
        bar = new Bar();

        foobar->begin();
        foo->begin();
        bar->begin();
    }

    void loop() {

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...