我在C++中制作结构,但当我试图在结构中添加新的人时,它显示错误。它只显示下面这行错误:main.cpp:14:42: error: could not convert '{"Marko", 27}' from '<brace-enclosed initializer list>' to 'Person'
你能告诉我我哪里做错了吗?
#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;
}发布于 2021-02-23 17:38:20
更新:根据评论,这似乎是一个gcc bug。期望在GCC 11中提供正确的行为。
现在,您可以使用构造函数来解决这个问题:
Person(const char* n, int a, Person* p): age(a), next(p) {
strncpy(name, n, strlen(n));
name[strlen(n)] = '\0';
}此外,不要忘记delete new分配的内存:
Person* per1 = new Person{"Marko", 27, nullptr};
cout << per1->name << endl;
delete per1;您还在尝试将operator<<应用于Person。为了“打印”Person,你需要重载这个操作符:
ostream& operator<<(ostream& out, const Person& p) {
return out << "Name: " << p.name << ", Age: " << p.age;
}确保定义在结构之外。
然后在main中,你可以这样使用它:
cout << *per1 << '\n';注意per1的取消引用。因为per1是一个指针,您希望打印指向的数据,而不是该数据的地址。
总之,它看起来是这样的:
#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;
}https://stackoverflow.com/questions/66330116
复制相似问题