注意:'person :: person()'被隐式删除,因为默认定义格式不正确 [英] note: 'person::person()' is implicitly deleted because the default definition would be ill-formed

查看:223
本文介绍了注意:'person :: person()'被隐式删除,因为默认定义格式不正确的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在研究一个示例程序,以帮助我学习C ++中的结构。这是我的代码:

I'm working on an example program to help me learn structs in C++. Here's my code:

#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()'被隐式删除,因为默认定义格式不正确。。这是我的构建日志:

But when I try to compile, it fails with note: 'person::person()' is implicitly deleted because the default definition would be ill-formed.. Here's my build log:

-------------- 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。

I can't find anything with Google relating to my problem. Any ideas? I'm using Code::Blocks with g++.

推荐答案

好吧,问题不在于该注释 。 注释仅说明错误的原因。错误是,当类 person 没有默认构造函数时,您试图默认构造 person 对象。

Well, the problem is not with that "note". The "note" simply explains the reason for the error. The error is that you are trying to default-construct your person object when class person does not have a default constructor.

您可以 {} -初始化该const成员,而不是尝试默认构造它,代码将编译

Instead of trying to default-construct it, you can {}- initialize that const member and the code will compile

person bob = { nextPersonID++, "Bob", {}, 1 };
bob.birthdate.day = 1;
bob.birthdate.month = 1;
bob.birthdate.year = 1990;
...

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

Alternatively, you can simply write your own default constructor for the class.

这篇关于注意:'person :: person()'被隐式删除,因为默认定义格式不正确的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆