当前位置: 首页 > 知识库问答 >
问题:

如何初始化具有常量变量的结构数组

邹高懿
2023-03-14

我有一个包含常量变量的结构数组;我使用构造函数初始值设定项列表进行初始化,但如果我创建该结构的数组,如何初始化该结构数组的所有元素。如果结构不包含const var,那么很容易完成

如果结构不包含const var,那么它很容易完成

#include<iostream>
struct s_Nconst{
    int num;
    int x1;
    // s_Nconst(int);
};
int main(){
    s_Nconst sN2;
    sN2.num=5;
    std::cout<<"initial values of num\t"<<sN2.num<<std::endl;   

    //making array of s_Nconst struct
    s_Nconst sN3[sN2.num];

    for(int i=sN2.num-1; i>-1; i--,++sN2.num){
        sN3[i].x1= sN2.num;
        std::cout<<"sn3["<<i+1<<"]\t"<<sN3[i].x1<<std::endl;
    }

    return 0;
}

但如果假设结构由const var组成,那么我可以使用构造函数初始值设定项列表生成结构的单个对象,但如果我要生成结构的数组,则会出现错误

#include<iostream>

struct s_const{
    const int x1,y1,z1;
    static int num;
    s_const(int,int,int);
};
s_const::s_const(int x,int y, int z)
        :x1(x),y1(y),z1(z) {

    std::cout<<"initial values of x1,y1,z1\t"<<this->x1<<" "<<this->y1<<" "<<this->z1<<std::endl;   
}


/*struct s_Nconst{
    int num;
    int x1;
    // s_Nconst(int);
};
 s_Nconst::s_Nconst(int x)
        :num(x){

    std::cout<<"initial values of num\t"<<this->num<<std::endl;   
} */


int main(){

    int a,b,c;
    a=1;b=2;c=3;
    s_const s1(a,b,c);

    //array of s1 is giving error
    s_const sc[3];




    //s_Nconst s2(++c);
    //s_Nconst sN2;
    //sN2.num=5;
    //std::cout<<"initial values of num\t"<<sN2.num<<std::endl;   

    //making array of s_Nconst struct
    //s_Nconst sN3[sN2.num];

    //for(int i=sN2.num-1; i>-1; i--,++sN2.num){
    //    sN3[i].x1= sN2.num;
        std::cout<<"sn3["<<i+1<<"]\t"<<sN3[i].x1<<std::endl;
    //}

    return 0;
}

有没有办法使结构数组具有常量变量以及如何初始化它们?

共有1个答案

靳金鹏
2023-03-14

您可以创建一个const对象数组,但它们必须初始化。例如,对于您的结构,它应该是:

s_const sc[3] = {{1, 2, 3}, {3, 4, 5}, {6, 7, 8}};

另一方面,与内置数组相比,您可能更喜欢std::array。

 类似资料:
  • 主要内容:使用“键值对”初始化结构体,使用多个值的列表初始化结构体,初始化匿名结构体结构体在实例化时可以直接对成员变量进行初始化,初始化有两种形式分别是以字段“键值对”形式和多个值的列表形式,键值对形式的初始化适合选择性填充字段较多的结构体,多个值的列表形式适合填充字段较少的结构体。 使用“键值对”初始化结构体 结构体可以使用“键值对”(Key value pair)初始化字段,每个“键”(Key)对应结构体中的一个字段,键的“值”(Value)对应字段需要初始化的值。 键值对的

  • 因为我是android开发新手,所以我不知道如何在使用lateinit变量之前初始化它。在此之前,我尝试过执行,就像这个github中提到的,但没有成功。所以现在我希望问题出在初始化textInput变量上。

  • 问题内容: 我有两个班,第一个是我的主班,第二个是我的编辑框架班。 我的第二个类(UpdateGUI)在其构造函数中提供oldName,并对其进行编辑,当我单击时,它将newName发送给我的第一个类。 我的第二堂课: 我的问题是,为什么newName为null? 更新: UpdateGUIDialog类: 输出: 我需要打印而不是null。 问题答案: Java对象有点像真实对象。并顾名思义:它

  • 问题内容: 我有以下代码: 这给了我以下错误: 解析错误:语法错误,在第19行的/home/user/Sites/site/registration/inc/registration.class.inc中出现意外的’(’,期待’)’ 所以,我想我做错了什么…但是如果不那样做怎么办?如果我用常规字符串更改mktime内容,它将起作用。所以,我知道我能做到这一点 的那种 像.. 有人有指针吗? 问题答

  • 问题内容: 如何使用类型初始化变量? 因为我有错误 问题答案: 常量声明不能包含函数调用(某些例外,请参见下文),它们必须在编译时进行评估,而函数调用是在运行时进行的。 引用规格:常量: 常数值由符文,整数,浮点数,虚数或字符串文字表示,标识符表示常数,常数表达式,结果为常数的转换或某些内置结果的值函数,例如应用于任何值,或应用于某些表达式,以及应用于常量,以及应用于数字常量的复数。 并引用Spe

  • 问题内容: 这行代码给出以下警告: 警告:变量sh只能在此位置为null。 并且,此代码给出以下警告: 警告:局部变量sh可能尚未初始化。 问题答案: 这是因为您需要初始化数组。试试这个: 如果不初始化,则会收到这些警告,如果运行它也会得到警告。