我有以下类定义......我想知道 fstream 对象。
#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 << "\n\nAPPENDED\n\n";
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);
}
但就像我说的,这只是我的尝试之一,似乎无论我如何尝试让类打开文件并写入文件,程序都会崩溃或执行一些不是后置条件的事情。
所以,我想知道是否甚至可以在类中使用文件流。如果是这样,我需要保留什么才能做到这一点。
注意:我不一定要寻找特定的实现,我对实现背后的“为什么”更好奇。我想知道我需要记住什么,以便将来能够知道我在做什么。