gpt4 book ai didi

c++ - 如何在成员初始化器列表中初始化数组

转载 作者:太空宇宙 更新时间:2023-11-04 16:09:11 25 4
gpt4 key购买 nike

C++ 完全入门。

这是一个成员初始化列表:

学生.cpp

Student::Student(int studentID ,char studentName[40]) : id(studentID), name(studentName){};

Student.h

class Student{

protected:
char name[40];
int id;
}

我的问题是 namechar[40] 类型,因此,name(studentName) 显示错误:

a value of type "char *" cannot be used to initialize an entity of type "char [40]"

如何在成员初始化列表中将name 数组初始化为studentName 数组?我不想用string,我试过strcpy没用

最佳答案

由于您不能用其他数组初始化(原始)数组,甚至不能在 C++ 中分配数组,所以您基本上有两种可能性:

  1. 惯用的 C++ 方法是使用 std::string,任务变得微不足道:

    class Student{
    public:
    Student(int studentID, const std::string& studentName)
    : id(studentID), name(studentName) {}
    protected:
    std::string name;
    int id;
    };

    然后,在需要时,您可以通过调用 c_str 成员函数从 name 获取底层原始 char 数组:

    const char* CStringName = name.c_str();
  2. 如果您想改用 char 数组,事情会变得更加复杂。您可以先对数组进行默认初始化,然后使用 strcpy 将其填充到构造函数主体中:

    class Student{
    public:
    Student(int studentID, const char* studentName)
    : id(studentID) {
    assert(strlen(studentName) < 40); // make sure the given string fits in the array
    strcpy(name, studentName);
    }
    protected:
    char name[40];
    int id;
    };

    请注意参数 char* studentNamechar studentName[40] 相同,因为您不能按值将数组作为参数传递,这是为什么编译器只是将其视为指向数组中第一个 charchar*

关于c++ - 如何在成员初始化器列表中初始化数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30551904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com