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