首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有模板的CircularBuffer在Keil MDK5上是不明确的错误?

带有模板的CircularBuffer在Keil MDK5上是不明确的错误?
EN

Stack Overflow用户
提问于 2017-07-19 04:46:12
回答 1查看 115关注 0票数 0

我已经建立了一个混合项目与在线ARMCC编译器,这是毫无怨言的。将项目导出到脱机Keil MDK5之后。我收到了一些投诉。如果有人知道如何删除/纠正这类问题,请提供建议。

代码语言:javascript
复制
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);

我知道如果CircularBuffer有不同的集合类型,它看起来很模糊,但是CircularBuffer被定义为一个模板,哪些应该用于不同的类型?在线编译器通过了,但MDK5没有,是否应该启用任何编译器选项?

CircularBuffer是在RingBuffer.h中定义的

代码语言:javascript
复制
#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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-12 04:09:13

项目中有两个CircularBuffer,一个在mbed中,另一个在用户代码中。合并它们,或者重命名其中一个。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45181180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档