Arduino基类中使用String类的成员的后虚函数必须在基类中实现的奇怪现象

测试代码如下

#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,只要基类中有一个虚函数没有实现,就不能通过,不知为何。

有高人知道原因的话还望不吝赐教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值