0

各コンストラクター内の配列に入力するために呼び出そうとする関数 Readf があります。コードステートメント ReadF(cap,*point,counter); を使用して、デフォルトのコンストラクターのみを試しました。

2 番目の引数は、理解する際に問題を引き起こしているものです。その横に「&」または「 」があるとエラーが発生します。そして、「*」で外部エラーが発生します。私はまだ C++ を初めて使用するので、クラスを扱う経験がありません。

私は ReadF メンバー関数を使用する必要があります。必要な結果を得るためにそれを呼び出す代わりに他の方法がありますか?

また、私が持っている関数のコードの一部は完璧ではないかもしれませんが、別の問題に移る前に、まずこの問題に対処したいと思います.

配列.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 invoked\n";
    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= invoked\n";
    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;
}
4

1 に答える 1