Keil MDK C++ 模板类 ambiguous错误

发布于 2022-09-05 06:35:27 字数 1748 浏览 49 评论 0

我有个工程,在mbed在线编译器中编译没有任何问题,但是导出到线下Keil MDK中,编译出错。因为对于C++的模板不熟悉。想了解一下,应该如何修改才能够规避这种错误。

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.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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

嗫嚅 2022-09-12 06:35:27

CircularBuffer 指代不明,
意思是你可能在一个命名空间(一般是全局),
导入了多个一样的名称(or 类)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文