如何创建一个接受char数组的构造函数?

时间:2019-02-26 17:13:31

标签: c++

我有一个类,它接受一个由constexpr指定大小的char数组。

Message.h:

constexpr size_t InputBufferSize = 32;

class Message
{
private:
    char input[InputBufferSize];
    int size;
public:
    //constructor
    Message(char input[], int size);
    //deconstructor
    ~Message();

    int getSize();
};

我对如何定义构造函数感到困惑,然后由于char数组而使用构造函数创建该类的新实例。这是我的尝试(我尝试过的一些方法):

Message.cpp:

#include "Message.h"

Message::Message(char input[], int size) {
    this->input[InputBufferSize] = input[];
    this->size = size;
}

Message::~Message() { }


int Message::getSize() {
    return size;
}

main.cpp:

#include <iostream>
#include "Message.h"

int main()
{
    char charinp; 
    char input[InputBufferSize] = { 'a','b','c','d','e','f' };

    Message ms1(input[], 1);

    std::cout << ms1.getSize() << std::endl;

    std::cin >> charinp;

    return 0;
}

我想创建一个构造函数,并在其参数中包含一个数组,该数组已经具有设置的大小,然后从中创建一个对象。传递给对象的数组将始终具有相同的大小,这是构造函数设置为接受的数组的大小。

2 个答案:

答案 0 :(得分:2)

您在主要功能中使用Message ms1(input[], 6);,请尝试将其更改为Message ms1(input, 6);。 这样做的原因是,您已经声明了数组char input[],并且在声明了非input之后必须将其引用为input[]

答案 1 :(得分:1)

Message(char input[], int size);

在参数声明中使用[]只是语法糖,编译器会将char input[]解释为char* input

this->input[InputBufferSize] = input[];

这不是合法代码。您需要使用(std::)memcpy()std::copy() / std::copy_n()将一个数组复制到另一个数组:

memcpy(this->input, input, size);

std::copy(input, input + size, this->input);

std::copy_n(input, size, this->input);

请注意,在复制size数组之前,应确保InputBufferSize不超过input

size = std::min(size, InputBufferSize);
Message ms1(input[], 6);

这也不是合法代码。将数组传递给参数时,您需要删除[]

Message ms1(input, 6);
std::cin >> charinp;

请注意,您可以改用std::cin.get(),并从代码中删除charinp(因为无论如何您都不会使用它)。