构造函数不存在

时间:2015-07-20 14:32:21

标签: c++

我正在尝试实现循环缓冲区。所以现在我正在测试一些代码。

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“没有默认构造函数。

2 个答案:

答案 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。