警告 C26495 未初始化变量 Student::score。始终初始化成员变量(type.6)。

img


这段代码里面拿出问题了,也没提示,就下面警告未初始化变量,调试就是空白的

string tName="";//试试(老师结构体中)

这个警告是在编译程序时出现的,意思是结构体Student中的score成员变量没有被初始化,而是采用了默认值。为了避免这个警告,应该在定义结构体时为所有成员变量提供初始值,或者在分配空间时初始化。

例如,可以将结构体Student的定义修改为:

Copy
struct Student {
    string sName = "";
    int score = 0;
};
这样,结构体中的所有成员变量都会被初始化。另外,在分配空间时也可以对结构体进行初始化:

ini
Copy
void allocateSpace(struct Teacher tArray[], int len) {
    string nameSeed = "ABCDE";
    for (int i = 0; i < len; i++) {
        tArray[i].tName = "Teacher_";
        tArray[i].tName += nameSeed[i];
        for (int j = 0; j < 5; j++) {
            tArray[i].sArray[j].sName = "Student_";
            tArray[i].sArray[j].sName += nameSeed[j];
            tArray[i].sArray[j].score = 60;
        }
    }
}
这样,在分配空间时就可以初始化结构体中的所有成员变量,避免了警告的出现。同时,为了避免命名空间std和string的混淆,可以将它们的声明顺序倒过来,先声明string再声明std:

Copy
#include <string>
namespace std {
    // ...
}
这样可以确保命名空间std中的所有定义都能够正确引用string类型。完整的代码如下所示:

ini
Copy
#include <iostream>
#include <string>

using namespace std;

// 学生结构体
struct Student {
    string sName = "";
    int score = 0;
};

// 老师结构体定义
struct Teacher {
    string tName = "";
    Student sArray[5];
};

// 分配空间并初始化老师和学生的信息
void allocateSpace(Teacher tArray[], int len) {
    string nameSeed = "ABCDE";
    for (int i = 0; i < len; i++) {
        tArray[i].tName = "Teacher_";
        tArray[i].tName += nameSeed[i];
        for (int j = 0; j < 5; j++) {
            tArray[i].sArray[j].sName = "Student_";
            tArray[i].sArray[j].sore = 60;
        }
    }
}

// 打印老师和学生的信息
void printInfo(Teacher tArray[], int len) {
    for (int i = 0; i < len; i++) {
        cout << "老师姓名:" << tArray[i].tName << endl;
        for (int j = 0; j < 5; j++) {
            cout << "学生姓名:" << tArray[i].sArray[j].sName 
                 << ",考试分数:" << tArray[i].sArray[j].score << endl;
        }
    }
}

int main() {
    Teacher tArray[3];
    int len = sizeof(tArray) / sizeof(tArray[0]);
    allocateSpace(tArray, len);
    printInfo(tArray, len);
    system("pause");
    return 0;
}
这样,就可以编译并运行这个程序了。在分配空间时,结构体中的所有成员变量都被正确初始化,程序不会再出现警告。同时,为了避免命名空间和string的混淆,我们还重新排列了它们的声明顺序。