首页 > 解决方案 > 在函数内部的类中创建结构时遇到问题

问题描述

收到错误“无法引用“Library::Transaction”的默认构造函数——它是一个已删除的函数

错误发生在定义函数的文件的第 129 行

这是我的头文件“classes.h”

https://pastebin.com/94BBGF4U

#pragma once
class Library {
    vector<Book> books;
    vector<Patron> people;

public:
    struct Transaction {
        Book book;
        Patron theMan;
        Date chapDate;
    };

    vector<Transaction> transactions;

    void add_Books_Lib(const Book& a) { books.push_back(a); }
    void add_Patron_Lib(const Patron& a) { people.push_back(a); }
    void check_Out(Patron & person, Book& a);
    bool check_User(Patron& person);
    bool check_Book(Book& a);
};

这是我定义函数的 cpp 文件

https://pastebin.com/gEF5s5Yc

#include "classes.h"
    void Library::check_Out(Patron& person, Book& a){
        if (check_Book(a) && check_User(person)) {
            if (!person.check_If_Owes_Fee()) {
                a.checkOut();
                Transaction person.get_Patron_Name(); //error here
            }
            else cout << "Can't perform operation.  User owes a fee";
        }
        else cout << "Invalid, user or book not in library";
        }

这是主要的cpp,如果它意味着什么

https://pastebin.com/hT0UmcVT

#include "classes.h"

int main() {
    Book one("123H", "Hey", "Cool", Date(31, 12, 2020), Genre::FICTION);
    Book two("123H", "Hey", "Cool", Date(31, 12, 2020), Genre::CHILDREN);

    operator<<(cout, one);

    return 0;
}

标签: c++classobjectstruct

解决方案


您的结构struct Transaction不包含默认构造函数。为什么?通常,如果您的结构不包含任何构造函数,如果结构的所有字段都可以使用相应的默认构造函数进行初始化,则编译器会自行添加它。但是,该结构Book没有默认构造函数,但有一个非默认构造函数。因此,编译器不会将默认构造函数添加到Book. 所以,对于交易也不行。

所以,要么你显式地定义一个默认构造函数(不带参数)到Transaction和汽车.book那里。或者您为Book.


推荐阅读