c++ - 在函数内部的类中创建结构时遇到问题
问题描述
收到错误“无法引用“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,如果它意味着什么
#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;
}
解决方案
您的结构struct Transaction
不包含默认构造函数。为什么?通常,如果您的结构不包含任何构造函数,如果结构的所有字段都可以使用相应的默认构造函数进行初始化,则编译器会自行添加它。但是,该结构Book
没有默认构造函数,但有一个非默认构造函数。因此,编译器不会将默认构造函数添加到Book
. 所以,对于交易也不行。
所以,要么你显式地定义一个默认构造函数(不带参数)到Transaction
和汽车.book
那里。或者您为Book
.
推荐阅读
- android - 在系统分区上安装应用程序后应用程序签名更改
- javascript - 未正确设置角度测试模块:无法解析所有参数(ngrx)
- php - 获取文本中所有以特定字符串开头并在括号之间的匹配项
- qt - ld 跳过共享库
- javascript - 使用 VS Code 调试独立的单个 JavaScript 文件
- python - 为 csv.reader 预处理一行
- linux - 如何通过 pip 安装 vowpalwabbit
- haskell - 数据构造函数中的奇怪类型语法
- c# - Spire Xls 设置单元格范围十六进制格式
- unity3d - 如何修复 Unity 教程“识别本地播放器”OnStartLocalPlayer() 中的错误?