C++ 在尝试调用读取文件的函数时出错

c++ getting error trying to call a function that reads a file

本文关键字:函数 出错 文件 读取 调用 C++      更新时间:2023-10-16

我有一个函数 Readf 我试图调用以填充每个构造函数中的数组,我只尝试使用带有代码语句 ReadF(cap,*point,counter)的默认构造函数;。

第二个论点是什么让我在弄清楚时遇到了问题,我会得到一个错误,旁边有"&"或"。 而且我得到一个带有"*"的外部错误,我仍然是 c++ 的新手,所以我在处理类方面没有经验。

我必须使用 ReadF 成员函数,是否有其他方法而不是调用它来获得我需要的结果。

此外,我拥有的一些函数代码可能并不完美,但我想先处理这个问题,然后再继续另一个。

array.h:

#include <iostream>
#include <string>
#include <fstream>
using namespace std;
class AR {
public:
    AR();
    AR(int);
    AR(const AR&);
    //~AR();
    void ReadF(const int, string&, int);   
    AR& operator=(const AR&);
    friend ostream& operator<<(ostream&, AR&);
    friend ifstream & operator>>(ifstream&, AR&);
private:
    string* point;
    int counter;
    int cap;
};

数组.cpp:

#include "array.h"

AR::AR() {
    counter = 0;
    cap = 2;
    point = new string[cap];
}
AR::AR(int no_of_cells) {
    counter = 0;
    cap = no_of_cells;
    point = new string[cap];
}
AR::AR(const AR& Original) {
    counter = Original.counter;
    cap = Original.cap;
    point = new string[cap];
    for(int i=0; i<counter; i++) {
        point[i] =Original.point[i];
    }
}
// AR::~AR() {
//  delete [ ]point;
//}
ostream& operator<<(ostream& out, AR& Original) {
    cout << "operator<< has been invokedn";
    for (int i=0; i< Original.counter; i++) {
        out << "point[" << i <<"] = " << Original.point[i] << endl;
    }
    return out;
}
AR& AR::operator=(const AR& rhs) {
    cout << "operator= invokedn";
    if (this == &rhs)
        return *this;
    point = rhs.point;
    return *this;
}
void ReadF(const int neocap, string& neopoint, int neocounter) {
    ifstream in;
    in.open("sample_strings.txt"); //ifstream in;  in.open("sample_data.txt");
    if (in.fail())
        cout<<"sample_data not opened correctly"<<endl;
    while(!in.eof() && neocounter < neocap) {
        in >> neopoint[neocounter];
        neocounter++;
    }
    in.close();
}

ifstream& operator>>(ifstream& in, AR& Original) {
    Original.counter = 0;
    while(!in.eof() && Original.counter < Original.cap) {
        in >> Original.point[Original.counter];
        (Original.counter)++;
    }
    return in;
}

看来你在 ReadF 定义中缺少 AR:: 。

再三考虑,您正在阅读可能尚未分配的 neopoint 索引。您可以将 ReadF 更改为读取:

void ReadF(const int neocap, string& neopoint,int neocounter)
{
    ifstream in;
    in.open("sample_strings.txt"); //ifstream in;  in.open("sample_data.txt");
    if (in.fail())
    {
        cout<<"sample_data not opened correctly"<<endl;
        return;
    }
    neopoint.resize(neocap);
    while(neocounter < neocap && in >> neopoint[neocounter])
    {
        neocounter++;
    }
    in.close();
}

虽然你可能想研究字符串流

std::ifstream in("sample_strings.txt");
if (in)
{
    std::stringstream buffer;
    buffer << in.rdbuf();
    in.close();
    inneopoint= buffer.str();
}