Visual C++中的类型转换错误
Type casting error in Visual C++
下面的代码演示了文本模式下的数据文件处理。
这是我的代码:
#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++没有太多经验,所以我真的无法找到解决方案。
student
转换为char *
。你为什么要那样做?
有一个辅助char *
,可以用作read()
的参数,然后在student
中设置数据。
正如hmjd所建议的那样,cast现在似乎可以工作了,但我敦促您不要这样做。只是碰巧字符数组是类的第一个成员,而且它在内存中与对象位于同一地址。但是,如果您更改成员的声明顺序,或者引入virtual
函数,甚至使用不同的编译器,那么一切都将失败。
不要投
您应该使用要修改的s1对象的成员,而不是对象本身
相关文章:
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 指向类成员函数的指针中存在类型转换错误
- Vulkan API 调试函数指针类型转换错误
- 模板扣除 /类型转换错误
- 尝试生成C++ .DLL的视觉对象类型/转换错误
- 需要构造函数/析构函数/类型转换错误
- C++类型转换错误
- 为什么数据类型转换错误只出现在C++中而不出现在C中
- 编译CppUTest和类型转换错误
- 为什么会出现此类型转换错误
- C++类型转换错误/
- 程序计算、类型转换错误
- C++-类型转换错误
- Visual C++中的类型转换错误
- 特征日志和exp函数类型转换错误
- 类型转换错误!在MSVC和GCC中都有
- 函数模板的c++怪异类型转换错误
- c++构造函数,析构函数,类型转换错误
- 有关类型转换错误的帮助
- 使用子类"类型转换"错误的 C++