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++:我不知道你正在使用的编译器在抱怨什么。谢谢。我可以复制你的结果。