【问题标题】:Error: A value of type "const char *" cannot be used to initialize an entity of type "char"错误:“const char *”类型的值不能用于初始化“char”类型的实体
【发布时间】:2019-08-25 16:48:14
【问题描述】:

由于某种原因,下面指示的代码出现错误读取,“类型为”const char **(当然只应该是一个星号)的值不能用于初始化类型为“char”的实体“”。我觉得这很奇怪,因为 fname 和 lname 似乎没有什么不同,但它们并没有像我预期的那样出现这样的错误。我也尝试将 char 手机制作成 char** 手机,但没有成功。有人可以让我知道问题是什么以及如何解决吗?

 struct Name {

    char fname[15];
    char lname[15];

};

struct Info {

    int grade;
    char phone[15];

};

struct Mark {

    int math;
    int sci;
    int eng;

};

struct Student {

    Name n;
    Info i;
    Mark m;

};

int main()
{

Student class_list[MAX_CLASS_SIZE] = {
    // Errors here          V V V V V V V 
    {"Bob", "Smith"}, {11, "519-688-5168"}, {88, 75, 78}
};

}

【问题讨论】:

  • 那是因为您在 C++ 中使用了 C 字符串。不要那样做。使用std::string
  • 你需要另一组大括号,但实际上你需要一些构造函数。
  • 后者是实际问题;前者的好建议(但如果不应用后者,仍然会给您留下错误)。 See it live.
  • MAX_CLASS_SIZE 未定义
  • @NikosC。您的意思是在电话中使用字符串而不是 char[15] 吗?我试过了,它出现了同样的错误

标签: c++ struct char


【解决方案1】:

这个

{"Bob", "Smith"}, {11, "519-688-5168"}, {88, 75, 78}

如果你定义和初始化一个 single Student 对象,你会使用它:

Student student = {
    {"Bob", "Smith"}, {11, "519-688-5168"}, {88, 75, 78}
};

但是,您正在尝试初始化 Student 对象的数组,因此每个元素都需要在大括号内:

Student class_list[MAX_CLASS_SIZE] = {
    { {"Bob", "Smith"}, {11, "519-688-5168"}, {88, 75, 78} }
//  1 2                 3                     4
};

1: Student 对象初始化器。
2:Name 对象初始化器。
3:Info 对象初始化器。
4:Mark 对象初始化器。

话虽如此,您应该避免使用 C 字符串。请改用std::string

#include <string>

struct Name {
    std::string fname;
    std::string lname;
};

struct Info {
    int grade;
    std::string phone;
};

struct Mark {
    int math;
    int sci;
    int eng;
};

struct Student {
    Name n;
    Info i;
    Mark m;
};

int main()
{
    Student class_list[MAX_CLASS_SIZE] = {
        { {"Bob", "Smith"}, {11, "519-688-5168"}, {88, 75, 78} }
    };
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多