变量的重新声明

时间:2011-04-12 12:38:14

标签: c++ arduino

当我运行Setup()时,我希望在我的控制台中看到“t”,然后是多个“x”字符。但是它只返回多个't'字符。这就像我的后悔永远不会被淹没。请参阅下面的代码示例:

class Returner
{
    public:
        Returner(){}

        char test()
        {
        }
};

class TReturner: public Returner
{
    public:
        TReturner(){}

        char test()
        {
            return 't';
        }
};

class XReturner: public Returner
{
    public:
        XReturner(){}

        char test()
        {
            return 'x';
        }
};

void setup()
{
    Serial.begin(9600);

    TReturner t = TReturner();
    Returner * retrn = &t;

    while(1)
    {
        Serial.print( retrn.test());

        XReturner x = XReturner();
        retrn = &x;

        _delay_ms(500);
    }
}

2 个答案:

答案 0 :(得分:0)

setup()将由引导加载程序调用一次。 (不要在其内部创建无限循环)
你应该定义一个loop()函数,它也会被引导加载程序“无限”地调用。

答案 1 :(得分:0)

我无法100%解释这种行为 - 我希望你不会打印任何字符,因为它使用的是Returner :: test - 但是如果你在C ++中覆盖一个函数则需要声明它在基类中是虚拟的:

class Returner 
{
  public:   
    Returner(){}
    virtual char test()
    {    
    }
};

没有测试是虚拟的,行

Serial.print( retrn.test() );

(你的意思是retrn->test()?)只会选择test的一个实现并始终使用它。如上所述,我希望这是空的Returner::test()。您可能还需要制作Returner :: test abstract

    virtual char test() = 0;

或者如果您将其保留为函数体,则返回一些值。