Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 访问父级及其父级_C++_Arduino - Fatal编程技术网

C++ 访问父级及其父级

C++ 访问父级及其父级,c++,arduino,C++,Arduino,我很难让子类引用其父类。 下面是一个新的、更简单的代码示例: class AlphaClass { public: AlphaClass(){} ~AlphaClass(){} void init() { alpha++; } int alpha = 0; }; class BetaClass : public AlphaClass { public: void init() { beta++; a

我很难让子类引用其父类。 下面是一个新的、更简单的代码示例:

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++         

问题源于抽象构造函数和析构函数。当我删除所有“虚拟”键时,它工作正常:

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() {

    }

您应该添加得到的编译器错误。还有,为什么你要使析构函数纯虚拟?请提供一个我摆脱了析构函数,但没有改变。上面添加了编译器错误:@xaxxon要求我提供一个“最小的、完整的和可验证的示例”。这正是我想要做的。我不喜欢这种高人一等的演讲。我认真对待我正在做的事情,只有当我陷入困境时才寻求帮助。我尊重有用的答案和回答。您发布的代码在“普通”编译器中似乎运行良好。很好C++:我不知道你正在使用的编译器在抱怨什么。谢谢。我可以复制你的结果。