首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在结构内部添加人员信息时出现C++错误

在结构内部添加人员信息时出现C++错误
EN

Stack Overflow用户
提问于 2021-02-23 17:07:59
回答 1查看 58关注 0票数 0

我在C++中制作结构,但当我试图在结构中添加新的人时,它显示错误。它只显示下面这行错误:main.cpp:14:42: error: could not convert '{"Marko", 27}' from '<brace-enclosed initializer list>' to 'Person'

你能告诉我我哪里做错了吗?

代码语言:javascript
复制
#include <iostream>

using namespace std;

struct Person {
    char name[50];
    int age;
    Person* next;
};


int main()
{
    Person* per1 = new Person({"Marko", 27});
    cout << per1 << endl;
}
EN

回答 1

Stack Overflow用户

发布于 2021-02-23 17:38:20

更新:根据评论,这似乎是一个gcc bug。期望在GCC 11中提供正确的行为。

现在,您可以使用构造函数来解决这个问题:

代码语言:javascript
复制
    Person(const char* n, int a, Person* p): age(a), next(p) {
        strncpy(name, n, strlen(n));
        name[strlen(n)] = '\0';
    }

此外,不要忘记delete new分配的内存:

代码语言:javascript
复制
    Person* per1 = new Person{"Marko", 27, nullptr};
    cout << per1->name << endl;
    delete per1;

您还在尝试将operator<<应用于Person。为了“打印”Person,你需要重载这个操作符:

代码语言:javascript
复制
ostream& operator<<(ostream& out, const Person& p) {
    return out << "Name: " << p.name << ", Age: " << p.age;
}

确保定义在结构之外。

然后在main中,你可以这样使用它:

代码语言:javascript
复制
cout << *per1 << '\n';

注意per1的取消引用。因为per1是一个指针,您希望打印指向的数据,而不是该数据的地址。

总之,它看起来是这样的:

代码语言:javascript
复制
#include <iostream>
#include <cstring>

using namespace std;

struct Person {
    char name[50];
    int age;
    Person* next;
    Person(const char* n, int a, Person* p): age(a), next(p) {
        strncpy(name, n, strlen(n));
        name[strlen(n)] = '\0';
    }
};

ostream& operator<<(ostream& out, const Person& p) {
    return out << "Name: " << p.name << ", Age: " << p.age;
}

int main()
{
    Person* per1 = new Person{"Marko", 27, nullptr};
    cout << *per1 << '\n';
    delete per1;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66330116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档