对'send_byte'的引用含糊不清,

时间:2016-06-16 09:31:38

标签: c++ class inheritance arduino virtual

我正在为arduino的RF模块制作一个库。当我收到一个我不知道如何解决的错误时,我差不多完成了我的代码。 错误发生在这段代码中:

#include "Rf_module.hpp"

class send;
class receive;

class whatsapp : public send, public receive
{
private:
    hwlib::target::pin_in_out &whatsapp_pin; 
public:
    whatsapp(hwlib::target::pin_in_out &whatsapp_pin, int frequency):
        send (whatsapp_pin, frequency),
        receive (whatsapp_pin, frequency),
        whatsapp_pin( whatsapp_pin )
    {}

    void send_text(char text[], int length)
    {
        for(int i = 0; i< length-1; i++)
        {
            int ascii_value = text[i];
            send_byte(ascii_value);

错误是:对'send_byte'的引用不明确。 我的代码是几个类中的结构,从部分抽象的类通信开始。

#include "hwlib.hpp"

class communication
{
protected:
    hwlib::target::pin_in_out & current_pin;
    int sending_frequency;
public:
    communication(hwlib::target::pin_in_out & current_pin, int sending_frequency);
    virtual void send_bit(int bit);
    virtual int get_bit();
virtual void get_startbit() = 0;
virtual void send_startbit() = 0;
virtual int get_byte() = 0;
virtual void send_byte(int byte) = 0;
};

然后还有一个RF模块本身的发送和接收类。

#include "hwlib.hpp"
#include "communication.hpp"


class send : public communication
{
public: 
    send(hwlib::target::pin_in_out & current_pin, int sending_frequency);
    void send_startbit() override;
    void send_byte(int byte) override;
    void test_send();

class receive : public communication
{
public:
    receive(hwlib::target::pin_in_out & current_pin, int sending_frequency); 
    void get_startbit() override;
    int get_byte() override;
    void test_receive();
};

我的主要看起来像这样;

#include "hwlib.hpp"
#include "whatsapp.hpp"

int main(void)
{
    auto pin = hwlib::target::pin_in_out(1,17);
    pin.direction_set_output();

    whatsapp sender(pin,10);
    sender.test_send();


    return 0;
}

许多文件中包含的hwlib库是我的老师用来处理arduino的库,它非常标准,它允许你使用引脚和其他一些方法。我希望你们有足够的信息 你可以帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

(condition ? expression_if_true : expression_if_false);

您正在使用多重继承,两者都会实现class whatsapp : public send, public receive ,因此会出现错误。您需要指定通过哪个类:

send_byte

但这似乎设计不好!