我试图实现循环缓冲区.所以现在我正在测试一些代码.
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
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
该行CircularBuffer Buffer;给出了错误:"类"CircularBuffer"没有默认构造函数.
定义此参数化构造函数时,禁用了编译器生成的默认构造函数
CircularBuffer(size_t capacity);
Run Code Online (Sandbox Code Playgroud)
您可以添加以下内容以获取默认构造函数(请注意,从defaultC++ 11开始,关键字是新的)
CircularBuffer() = default;
Run Code Online (Sandbox Code Playgroud)
虽然您应该确保您的类在有效状态下实例化.如果默认初始化值不适合该帐单,则应手动定义默认构造函数以将成员变量初始化为有效状态.
如果您打算调用参数化构造函数,则需要传递您声明的参数.例如
CircularBuffer buffer{10}; // constructed with a capacity of 10
Run Code Online (Sandbox Code Playgroud)