首页 > 开发 > C++ > 正文

Keil MDK C++ 模板类 ambiguous错误

2017-09-11 21:19:28  来源: 网友分享

我有个工程,在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

解决方案

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