可以在类中使用 fstream 对象吗?
can fstream objects be used inside a class?
我有以下类定义...我想知道流对象。
#ifndef CLIENTLIST_H
#define CLIENTLIST_H
#include <string>
#include <vector>
#include <fstream>
using namespace std;
class ClientList
{
private:
// A structure for the list
struct ListNode
{
char gender;
string name;
string phone;
int numInterests; // The number of interests for the client
vector<string> interests; // list of interests
string match;
struct ListNode *next; // To point to the next node
};
ListNode *head; // List head pointer
string name;
void detach(string); // to unmatch the corresponding client
public:
// Constructor
ClientList();
// Destructor
~ClientList();
// Linked list operations
void appendNode(char, string, string, int, vector<string>, string, fstream &);
string interestCompare(vector<string>, string, fstream &);
void unmatch(string, ClientList, fstream &);
void printMatch(fstream &);
void printFree(fstream &);
};
#endif
这是我尝试在类中使用 fstream 对象的第五种不同方式,但它们都不起作用,出现了各种错误。
这是我最近如何实现的功能示例
//**************************************************
// appendNode appends a node containing the *
// value pased into num, to the end of the list. *
//**************************************************
void ClientList::appendNode(char gen, string nm, string ph, int numIntr,
vector<string> intr, string mch, fstream &dates)
{
dates.open("dates.txt", ios::out | ios::out);
ListNode *newNode; // To point to a new node
ListNode *nodePtr; // To move through the list
// Allocate a new node and store data in it.
newNode = new ListNode;
newNode->gender = gen;
newNode->name = nm;
newNode->phone = ph;
newNode->numInterests = numIntr;
newNode->interests = intr;
newNode->match = mch;
newNode->next = NULL;
// If there are no nodes in the list
// make newNode the first node.
if (!head)
head = newNode;
// Otherwise, insert newNode at end.
else
{
// Initialize nodePtr to head of list.
nodePtr = head;
// Find the last node in the list.
while (nodePtr->next)
nodePtr = nodePtr->next;
// Insert newNode as the last node.
nodePtr->next = newNode;
}
dates << "nClient: " << newNode->gender << ", " << newNode->name << ", "
<< newNode->phone << ", " << newNode->numInterests << ", ";
for (int index = 0; index < newNode->numInterests; index++)
dates << newNode->interests[index] << ", ";
dates << newNode->match << ".n";
cout << "nnAPPENDEDnn";
dates.close();
}
这是我如何从main()调用它的一个例子
//append to file
if (gender == tolower('m'))
{
match = Female.interestCompare(interests, name, dates); // compare the vector of interests to the client interests
// in the female list
Male.appendNode(gender, name, phone, numInterests, interests, match, dates);
}
但就像我说的,这只是我的一次尝试,似乎无论我如何尝试让类打开文件并写入它,程序都会崩溃或执行一些不是后置条件的事情。
所以,我想知道是否可以在类中使用文件流。如果是这样,我需要保留什么才能做到这一点。
注意:我不一定在寻找特定的实现,我更想知道实现背后的"原因"。我想知道我需要记住什么,以便将来能够知道我在做什么。
应该是可能的。
也许你经过的流有问题。 仔细检查"日期"。
fstream 从 iOS 继承了 Fail()。 它可用于检查您的流是否正常。 您可以使用 is_open() 来检查文件是否正确打开。
#include <assert.h>
// stuff...
fstream dates("dates.txt", fstream::in | fstream::out);
if (dates.is_open())
{
cout << "dates.txt opened ok" << endl;
}
dates.close();
if (gender == tolower('m))
{
assert(dates.fail() == false);
match = Female.interestCompare(interests, name, dates);
assert(dates.fail() == false);
Male.appendNode(gender, name, phone, numInterests, interests, match, dates);
}
至少当它失败时,你会得到一个行号,可以从那里进行调试。
另外,我猜你的意思是改变第二个ios::out
ClientList::appendNode(...)
{
//dates.open("dates.txt", ios::out | ios::out);
dates.open("dates.txt", ios::in | ios::out | ios::app);
...
}
相关文章:
- fstream / ifstream / ofstream 对象如何转换为布尔值
- 有效而干净的方法来编写一个ofstream/fstream对象,以用标头编写表
- 使用 fstream 对象将文件中的信息存储到变量中
- C++是否可以将fstream对象设置为在每次调用<<
- fstream 对象无法被 Visual Studio 的 JIT/Compiler 识别
- 应该多久打开/关闭一次 fstream 对象 c++
- if('fstream 对象')如何返回 true 或 false 的值,具体取决于文件是否已打开?
- 在c++中使用同一个fstream对象进行读写时,是否有任何导致错误的特性
- 自定义文件类中fstream对象的生存期
- fstream对象的文件结束
- 在同一个fstream对象上使用getline的两个函数
- 无法声明 fstream 对象?但是可以将其声明为指针吗?
- 如何使用具有相对路径的fstream对象
- 从内存缓冲区创建fstream对象
- 如何使用fstream对象作为成员变量
- C++使用fstream对象读取和写入文本文件时出现问题
- 可以在类中使用 fstream 对象吗?
- 使用 fstream 对象作为函数参数
- c++中,fstream对象作为引用传递给函数
- 如何为 fstream 对象设置标志FILE_FLAG_BACKUP_SEMANTICS