4

クラスでこれらのポインター変数を使用してファイルにデータを書き込むことができません。プログラムにエラーはありませんが、ファイルにデータは書き込まれません。誰かが私が何か間違ったことをしている場所を教えてください。

#include <iostream.h>
#include <fstream.h>

class studentinfo
{
    private:/*Creating Private Data Members */
        char* VUID;
        char* campusID;
        char* Studentname;
        char* Fathername;

    public:
        void Storefile();/* Function to Store Data in the File*/
        char Display();/*Function to Read and then Display Data from the File*/
        studentinfo(char*, char*, char*, char*);/*Constructor to initialize Data Members*/
        ~studentinfo();
};

/* Constructor Defined Here*/
studentinfo::studentinfo(char* VUID, char* campusID, char* Studentname, char* Fathername)
{
    cout << "Parameterized Contructor is Called" << endl << endl;
}

/*Destructor Defined Here*/
studentinfo::~studentinfo()
{
    cout << "Destructor Called for destruction of the object" << endl;
    system("pause");
}

/*Function to Store Data in the File Defined here*/
void studentinfo::Storefile()
{
    ofstream re;
    re.open("record.txt");
    if(!re)/*Error Checking Mechanism*/
    {
        cout<<"Error Reading File"<<endl;
    }

    re << VUID << endl << campusID << endl << Studentname << endl << Fathername << endl;/*Using data members to Store data in the File*/
    cout << "All the Data Members are Stored in a File" << endl << endl;
    re.close();
}

/*Function to Read and then Display the data in the File is definde here */              
char studentinfo::Display()
{
    char output[100];/*Array to store and display the data*/
    ifstream reh;
    reh.open("record.txt");
    if(!reh)
    {
        cout << "Error Reading File" << endl;
    }

    cout << "Following is My Data" << endl << endl;
    while(!reh.eof()){
        reh.getline(output, 100, '\n');/*Reading the data and storing it in the 'output' array line by line*/
        cout << output << endl;
    }

    reh.close();
}


/*Main Function starting here*/                  
main()
{
    studentinfo s1("mc130202398", "PMTN08", "Rehan Shahzad Siddiqui","Rizwan Ali Siddiqui");/*Object Created and Initialized by constructor calling*/
    s1.Storefile();/*Function Call*/
    s1.Display();/*Function Call*/

    system("pause");
}
4

2 に答える 2

6

コンストラクターが壊れており、すべてのポインターが割り当てられていません。変数に値を割り当てるまで、変数の値を使用することはできません。

また、あなたはどんなくだらないコンパイラを使用していますか、またはどのような警告設定をしていますか? コンストラクターには定数へのポインターが渡されていますが、const 以外のポインターが必要です。それは間違いなく警告を引き起こし、これらのポインターの誤った取り扱いを指摘しているはずです。

  studentinfo s1("mc130202398", "PMTN08", "Rehan Shahzad Siddiqui","Rizwan Ali Siddiqui");/*Object Created and Initialized by constructor calling*/

コンストラクターに一連の定数を渡すことに注意してください。

studentinfo::studentinfo(char* VUID, char* campusID, char* Studentname, char* Fathername)

おっと、コンストラクターは通常のchar*ポインターを受け取ります。では、これらのポインタは何を指しているのでしょうか?

ヒント: 賢明な C++ クラスを使用するstd::stringと、これらの問題は魔法のように解決されます。

于 2013-06-26T07:59:36.957 に答える