CircularBuffer s šablonou je dvojznačný chyba na Keil MDK5?

hlasů
0

Jsem vybudoval mbed projekt s on-line ARMCC kompilátor, který nemá žádné stížnosti vůbec. Po exportu projektů offline Keil MDK5. Dostal jsem tyto stížnosti. Prosím o radu, jestli někdo ví, jak odstranit / správné takový problém.

SerialInterfaceProtocol/SerialInterfaceProtocol.h(16): error:  #266: CircularBuffer is ambiguous
  typedef CircularBuffer<uint8_t> SerialBuffer_t;

AlohaTransceiver/AlohaTransceiver.h(178): error:  #266: CircularBuffer is ambiguous
  CircularBuffer<AlohaFrame *> AlohaTxQueue;

AlohaTransceiver/AlohaTransceiver.cpp(44): error:  #266: CircularBuffer is ambiguous
  CircularBuffer<AlohaFrame *> AlohaRxQueue(10);

main.cpp(12): error:  #266: CircularBuffer is ambiguous
  CircularBuffer<uint8_t> SerialInputBuffer(128);

main.cpp(13): error:  #266: CircularBuffer is ambiguous
  CircularBuffer<uint8_t> SerialOutputBuffer(128);

Znám CircularBuffer zdá nejasné, pokud má differenet typy, ale CircularBuffer je definována jako šablona, ​​která by měla být použita pro různé typy? A on-line překladač prošel, ale MDK5 ne, je tam nějaké možnosti kompilátoru by měla být povolena?

CircularBuffer je definován v RingBuffer.h

#ifndef RINGBUFFER_H_
#define RINGBUFFER_H_

#define DEFAULT_MAX_BUFFER_SZ 64

#include <stdint.h>
#include <stdlib.h>

template <typename T>
class CircularBuffer
{
private:
    const size_t buffer_size;
    size_t read_ptr;
    size_t write_ptr;
    size_t count;

    // mutex lock
    bool mux; 

    // overflow
    bool is_over_flow;

    // container
    T *data;


public:
    CircularBuffer(const size_t size=DEFAULT_MAX_BUFFER_SZ);
    ~CircularBuffer();

    // psudo mutex
    bool isLocked();
    void lock();
    void unlock();

    // enqueue and dequeue
    void enqueue(T in);
    T dequeue();

    // pointer operation
    size_t getReadPtr();
    size_t getWritePtr();
    size_t getCounter();

    // overflow
    bool getOverFlow();
    void clearOverFlow();

    // operation
    T first();
    T last();

    // random access
    T operator[](size_t idx);
};

#endif
Položena 19/07/2017 v 04:46
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
0

Existují dva CircularBuffer v projektu, jeden je v mbed OS, druhá je v uživatelském kódu. Sloučit nebo přejmenování jednoho z nich.

Odpovězeno 12/01/2018 v 04:09
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more