如何在c ++中的类构造函数中将整个数组初始化为单个元素
Posted
技术标签:
【中文标题】如何在c ++中的类构造函数中将整个数组初始化为单个元素【英文标题】:How to initialize whole array to single element in class constructor in c++ 【发布时间】:2020-06-13 12:00:43 【问题描述】:您好,我希望在类的构造函数中将整个数组初始化为单个元素。我已经尝试过 this 解决方案,但我遇到了这个错误。
1>C:\Users\Ahmad Mustafa Anis\source\repos\ciruclar queue\Source.cpp(8,8): error C2590: 'sig': only a constructor can have a base/member initializer list
1>Done building project "ciruclar queue.vcxproj" -- FAILED.
我的代码是
class CircularQueue
public:
int dataItems[10];
sig() : dataItems0, 0, 0, 0, 0, 0, 0, 0, 0, 0
;
我有 Visual Studio 2019,我猜它的 c++ 版本是 cpp17。如果有某种方式我可以添加一个构造函数并将整个数组分配给 0 而无需 for 循环或显式逐个元素,例如这个构造函数
CircularQueue()
dataItems = 0 ;
或者这个
CircularQueue()
dataItems = 0 ;
在这两种情况下我的错误都是
error C3863: array type 'int [10]' is not assignable
【问题讨论】:
方法sig()
不是构造函数。您只能将初始化列表与构造函数一起使用。
【参考方案1】:
如果你想用0
初始化所有值
CircularQueue() : dataItems
或者,
CircularQueue() : dataItems0,0,0,0,0,0,0,0,0,0
如果数组太长,可以这样做。它没有初始化。它在初始化之后赋值。
CircularQueue()
std::fill(dataItems, dataItems+10, 3); //3 for example
【讨论】:
使用dataItems+sizeof(dataItems)
可能更安全。
@Flo No sizeof(dataItems)
是 40
。
这行得通。我需要分配 0,所以第一种技术对我有用。谢谢。
@김선달 是的,需要除以sizeof(int)
fill
可以使用begin
,end
,所以如果改变大小,只需要在一个地方完成。以上是关于如何在c ++中的类构造函数中将整个数组初始化为单个元素的主要内容,如果未能解决你的问题,请参考以下文章