次のコードは、テキストモードで扱うデータファイルを示しています。型キャストエラー++
#include "stdafx.h"
#include "fstream"
#include "conio.h"
#include "string"
#include "iostream"
using namespace std;
int count = 0;
class student
{
char name[50], grade;
float mks;
public:
student()
{
mks = 0;
}
void getdata();
void putdata();
void moddata();
};
void student :: getdata()
{
cout << "Enter data for record number: " << "(++count)" << ": ";
cout << "\nEnter name of the student: ";
cin >> name;
cout << "\nEnter marks: ";
cin >> mks;
cout << "\nEnter grade: ";
cin >> grade;
_getch();
}
void student :: putdata()
{
cout << "\nDisplaying data of required record: ";
cout << "\nName: " << name << "\nMarks: " << mks << "\nGrade: " << grade;
_getch();
}
void student :: moddata()
{
cout << "Enter correct details:-" << endl;
cout << "Enter name: ";
cin >> name;
cout << "\nEnter marks: ";
cin >> mks;
cout << "\nEnter grade: ";
cin >> grade;
_getch();
}
int _tmain(int argc, _TCHAR* argv[])
{
fstream stu ("stud.txt", ios::in | ios::out);
student s1;
char ans = 'y';
int ch, offset, mrec;
do
{
cout << "\nMAIN MENU:" << endl;
cout << "1. Add Record" << endl;
cout << "2. Modify Record" << endl;
cout << "3. Display Record" << endl;
cout << "4. Exit" << endl;
cout << "Enter your choice (1-4): ";
cin >> ch;
switch (ch)
{
case 1: s1.getdata();
stu.write ((char*) &s1, sizeof (student));
break;
case 2: if (!count)
{
cout << "No record added yet. Type option number first.";
_getch();
break;
}
cout << "Enter the record number to be modified: ";
cin >> mrec;
if (mrec > count)
{
cout << "Error. Only " << count << " records have been added.";
_getch();
break;
}
offset = (mrec - 1)* sizeof (student);
stu.seekg (offset);
stu.read ((char*) &s1, sizeof (student)); //C2440
s1.putdata();
cout << "Do you want to modify your record (y/n): ";
cin >> ans;
if (ans == 'y' || ans == 'Y')
{
s1.moddata();
stu.seekg(offset);
stu.write ((char)* &s1, sizeof (student));
break;
}
break;
case 3: if (!count)
{
cout << "No record added yet. Type option number first.";
_getch();
break;
}
cout << "Enter record number to be displayed: ";
cin >> mrec;
if (mrec > count)
{
cout << "Error. Only " << count << " records have been added.";
_getch();
break;
}
offset = (mrec - 1)*, sizeof (student);
stu.seekg (offset);
stu.read ((char)* &s1, sizeof (student)); //C2440
s1.putdata();
break;
case 4: break;
default: cout << "Wrong choice.";
}
} while (ch != 4);
_getch();
return 0;
}
私はエラー番号
C2440: 'type cast' : cannot convert from 'student' to 'char' 1> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
これは非常に奇妙な問題であるように思わを取得しています:
は、ここに私のコードです。私はC++で多くの経験を持っていないので、実際にはこれを解決することはできません。
は、あなたが小さい再生にそれを煮詰めることができ、変更したいS1オブジェクトのメンバを使用する必要がありませんか?どの行番号がエラーですか? –
下にスクロールすると、コード行に対して2つのコメント '// C2440'が表示されます。 –
変化(CHAR)* =>(のchar *)、それを指摘するため – fizzbuzz