我有一个类,它接受一个由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;
}
我想创建一个构造函数,并在其参数中包含一个数组,该数组已经具有设置的大小,然后从中创建一个对象。传递给对象的数组将始终具有相同的大小,这是构造函数设置为接受的数组的大小。
答案 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
(因为无论如何您都不会使用它)。