gpt4 book ai didi

c++ - 注意 : 'person::person()' is implicitly deleted because the default definition would be ill-formed

转载 作者:IT老高 更新时间:2023-10-28 12:48:25 30 4
gpt4 key购买 nike

我正在开发一个示例程序来帮助我学习 C++ 中的结构。这是我的代码:

#include <stdio.h>
#include <iostream>
#include <string>

using namespace std;

int nextPersonID = 0;
int nextAddressID = 0;

struct date {
int day;
int month;
int year;
};

struct address {
int id;
string address;
date effectiveDate;
date expirationDate;
};

struct person {
int id;
string name;
date birthdate;
const int numberOfAddresses;
address addresses [1];
};

int main () {
person bob;
bob.name = "Bob";
bob.id = nextPersonID;
nextPersonID++;
bob.birthdate.day = 1;
bob.birthdate.month = 1;
bob.birthdate.year = 1990;
bob.numberOfAddresses = 1;
bob.addresses[0].address = "31415 E. Pi Blvd.";
bob.addresses[0].id = nextAddressID;
nextAddressID++;
bob.addresses[0].effectiveDate.day = 1;
bob.addresses[0].effectiveDate.month = 1;
bob.addresses[0].effectiveDate.year = 1990;
bob.addresses[0].expirationDate.day = 1;
bob.addresses[0].expirationDate.day = 1;
bob.addresses[0].expirationDate.day = 2020;
cout << bob.name;
}

但是当我尝试编译时,它失败了 注意:'person::person()' 被隐式删除,因为默认定义格式不正确。。这是我的构建日志:

-------------- Build: Debug in DataStructures (compiler: GNU GCC Compiler)---------------

mingw32-g++.exe -Wall -g -std=c++11 -I"C:\Program Files (x86)\CodeBlocks\MinGW_Dev_Libs\include\SDL2" -c C:\Users\Duncan\Documents\C++\Challenges\DataStructures\DataStructures.cpp -o obj\Debug\DataStructures.o
C:\Users\Duncan\Documents\C++\Challenges\DataStructures\DataStructures.cpp: In function 'int main()':
C:\Users\Duncan\Documents\C++\Challenges\DataStructures\DataStructures.cpp:32:12: error: use of deleted function 'person::person()'
C:\Users\Duncan\Documents\C++\Challenges\DataStructures\DataStructures.cpp:23:8: note: 'person::person()' is implicitly deleted because the default definition would be ill-formed:
C:\Users\Duncan\Documents\C++\Challenges\DataStructures\DataStructures.cpp:23:8: error: uninitialized non-static const member 'const int person::numberOfAddresses'
C:\Users\Duncan\Documents\C++\Challenges\DataStructures\DataStructures.cpp:39:29: error: assignment of read-only member 'person::numberOfAddresses'
Process terminated with status 1 (0 minute(s), 1 second(s))
3 error(s), 0 warning(s) (0 minute(s), 1 second(s))

我在 Google 上找不到任何与我的问题相关的信息。有任何想法吗?我正在使用带有 g++ 的 Code::Blocks。

最佳答案

嗯,问题不在于那个“注释”。 “注释”只是解释了错误的原因。错误是当类 person 没有默认构造函数时,您试图默认构造您的 person 对象。

您可以{}- 初始化该 const 成员,然后代码将编译

,而不是尝试默认构造它
person bob = { nextPersonID++, "Bob", {}, 1 };
bob.birthdate.day = 1;
bob.birthdate.month = 1;
bob.birthdate.year = 1990;
...

或者,您可以简单地为该类编写自己的默认构造函数。

关于c++ - 注意 : 'person::person()' is implicitly deleted because the default definition would be ill-formed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31196102/

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