测试代码如下
#include <Arduino.h>
class TestBase
{
public:
int a;
virtual String A();
};
class Test1 : public TestBase
{
public:
String A()
{
return "";
}
};
TestBase *t;
void setup()
{
t = new Test1;
Serial.println(t->A());
}
void loop()
{
}
此段代码verify时顺利通过
但是,如果基类的成员类型为String,代码改为
#include <Arduino.h>
class TestBase
{
public:
String a;
virtual String A();
};
class Test1 : public TestBase
{
public:
String A()
{
return "";
}
};
TestBase *t;
void setup()
{
t = new Test1;
Serial.println(t->A());
}
void loop()
{
}
则verify时会提示
。。。AppData\Local\Temp\ccddmEre.ltrans0.ltrans.o: In function `__base_ctor ':
。。。.ino:1: undefined reference to `vtable for TestBase'
。。。ino:1: undefined reference to `vtable for TestBase'
collect2.exe: error: ld returned 1 exit status
exit status 1
不知是什么原因,此时只要将那个虚函数实现,代码改为
#include <Arduino.h>
class TestBase
{
public:
String a;
virtual String A() {}
};
class Test1 : public TestBase
{
public:
String A()
{
return "";
}
};
TestBase *t;
void setup()
{
t = new Test1;
Serial.println(t->A());
}
void loop()
{
}
则可以顺利通过verify,只要基类中有一个虚函数没有实现,就不能通过,不知为何。
有高人知道原因的话还望不吝赐教。