我正在尝试实现循环缓冲区。所以现在我正在测试一些代码。
raw_buffer.h
#include <algorithm> // for std::min
#ifndef RAWBUFFER_H
#define RAWBUFFER_H
class CircularBuffer
{
public:
CircularBuffer(size_t capacity);
~CircularBuffer();
size_t size() const { return size_; }
size_t capacity() const { return capacity_; }
// Return number of bytes written.
size_t write(const char *data, size_t bytes);
// Return number of bytes read.
size_t read(char *data, size_t bytes);
private:
size_t beg_index_, end_index_, size_, capacity_;
char *data_;
};
extern CircularBuffer MyCircularBuffer;
#endif
main_raw.cpp
#include "raw_buffer.h"
#include <iostream>
#include <string>
using namespace std;
int main() {
const char *data_test1 = "AAAA";
const char *data_test2 = "BBBB";
const char *data_test3 = "CCCC";
CircularBuffer Buffer;//<---error
return 0;
}
第CircularBuffer Buffer;
行给出了错误:“类”CircularBuffer“没有默认构造函数。
答案 0 :(得分:5)
定义此参数化构造函数时,禁用了编译器生成的默认构造函数
CircularBuffer(size_t capacity);
您可以添加以下内容以获取默认构造函数(请注意,从{+ c> 11开始,default
关键字是新的)
CircularBuffer() = default;
虽然您应该确保您的类在有效状态下实例化。如果默认初始化值不符合条件,则应手动定义默认构造函数以将成员变量初始化为有效状态。
如果您打算调用参数化构造函数,则需要传递您声明的参数。 E.g。
CircularBuffer buffer{10}; // constructed with a capacity of 10
答案 1 :(得分:3)
正如@CoryKramer所说,你没有得到默认的构造函数。如果你想改变它,你也可以这样做:
CircularBuffer(size_t capacity = 0);
默认情况下,如果没有容量发送,则为0。