如何在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 ++中的类构造函数中将整个数组初始化为单个元素的主要内容,如果未能解决你的问题,请参考以下文章

在类构造函数内初始化 Dev C 中的字符串数组

在 C++ 中初始化动态二维数组

在 C 中将多维数组作为参数传递

关于C语言结构体构造函数初始化的问题?

在c ++中初始化构造函数中的c数组时出错

在 C++ 中的类构造函数中初始化结构数组