C++集合对象和 iStream 文件输入
C++ Collection Objects & iStream File Input
我今天一整天都被代码难住了。我有很多课程要处理一系列曲目和专辑。我的代码编译并成功读取文件,但一旦我尝试使用istream&运算符,它在运行时出错。
这就是错误:
error LNK2001: unresolved external symbol "class std::basic_istream<char,struct std::char_traits<char> > & __cdecl operator>>(class std::basic_istream<char,struct std::char_traits<char> > &,class AlbumCollection &)" (??5@YAAAV?$basic_istream@DU?$char_traits@D@std@@@std@@AAV01@AAVAlbumCollection@@@Z)1>C:UsersShardyDesktopAlbumDatabaseDebugAlbumDatabase.exe : fatal error LNK1120: 1 unresolved externals
我真的很感激你的帮助。它变得令人沮丧。我的书和谷歌都没有任何亮点。谢谢你抽出时间。
一些问题:
- main.c:如果文件成功打开,则声明文件已成功加载。为什么要麻烦先打开文件如果它已经装载了?嗯,怎么可能呢
- main.c:您永远不会调用任何从文件中读取的方法
- main.c:您可以使用
if (file)
而不是if (file.is_open())
- main.c:在
if
语句中缺少一个结束}
- main.c:您没有使用
argc
或argv
,因此可以声明main
作为CCD_ 8 - 您需要发布类声明(头文件)以及方法定义
- duration.cpp:当你的输入法遇到不是数字或空格的东西,例如":">
- duration.cpp:您的加法运算符不执行时间运算正确,尤其是溢出。尝试添加"00:59:35"00:02:30">
- duration.cpp:您的
operator==
将返回上一次的结果表达式,因为您使用的是逗号","运算符。你可能想要使用CCD_ 10或逻辑AND运算符 - duration.cpp:第3条规则:如果定义构造函数,请复制构造函数或销毁,则应声明所有3和赋值运算符
- duration.cpp:数学规则:如果您定义
operator+
或operator-
您还应该将运算符+=
和-=
实现为好请参见Boost数学库 - duration.cpp:订购规则:如果你计划订购或比较,您应该实现运算符
<, <=, ==, !=, >,
和>=
。提示:把时间换算成秒,这会让你的生活更轻松进行比较时。请参见boost::less_than_comparable -
track.cpp:您的输入法首先读取曲目名称,然后持续时间。数据文件首先显示持续时间,然后显示曲目名称。您也没有代码来处理之间的字段分隔符持续时间和列。
Yep, adebuggerwould be helpful as well as pencil and paper to go through this code.
很常见的是,在您的main中出现了不匹配的大括号。您的else语句在之前(即} else {...}
)应该有一个右大括号
更重要的是,我将努力解决你的主体中列出的特定问题(关于汇编)。首先,我列出了我的假设。看起来,由于函数实现使用了作用域(::
),所以实现和接口是适当分离的(即,类在头文件中声明,实现在源文件中)。
此外,我假设operator<<
的实现与AlbumCollections的实现在同一个文件中。这很好,但是,您的主文件不知道这一点。它目前只针对源文件进行编译。如果没有更多的信息,我想这是你问题的关键。您将需要转发声明此运算符,以便它在其他文件中工作。
在相册集合的头文件中,在AlbumCollection
声明之后包括转发声明,如下所示(我假设您在头中没有使用using
指令。如果您使用了,则可能不应该使用):
std::istream& operator>>(std::istream& is, AlbumCollection& albums);
您可能需要在标头#include <iostream>
中进行正确编译。但是,在任何包含AlbumCollection.h
的地方(或调用其相应标头的任何地方),都可以使用此重载。当您将程序链接到一起时,将使用您之前定义的定义。此外,为了实现这一点,您可能需要从定义中删除inline
限定符。
请注意,如果这是问题所在,那么错误输出可能看起来非常可怕。如果您有这个问题,许多编译器错误输出将消失,并且调试您可能存在的任何现有代码编译问题将简单得多。
- C++文本文件输入
- C++ 中文件输入输出中的长长 v/s int
- 如何修复函数中的 fstream 文件输入以将正确的信息存储在结构数组中?
- 用空格填充 2D 数组(从文件输入)
- 流对象来表示文件输入,然后是标准输入?
- 用精神解析文件输入
- 从文件输入和输出
- 来自文本文件输入 c++ 的向量
- 如何通过键盘或分数文件输入分数
- 了解文件输入和输出,我可以写入文件,但无法从文件打印
- 词频程序 - 文件输入太大?
- 尝试从 csv 文件输入大量数据时出错
- 如何将文件从文件输入到C 中的矩阵中
- 如何从Windows CMD运行可执行文件并将其传递给文件输入的参数参数和重定向
- 如何解析文本文件并使用构造函数中的文件输入来创建对象的容器
- 这是读取文件输入的正确方法吗?
- 如何在 c++ 中使用二进制文件输入/输出读取/写入结构的字符串类型成员
- 如何创建一个具有空值、递减编号系统和.txt文件输入值的二维阵列网格
- C 文件输入流循环问题
- 使用对输入整数的文件输入