关于C++中~error C2679: binary '<<' 的问题!!求帮忙!感激不尽!

奔跑的鸭蛋 2014-03-26 08:33:59
源程序是这样的:
#include <iostream>
#include <fstream>

using namespace std;

struct FishOil
{
string name;
string uid;
char sex;
};

bool InitFishC();
bool ReadFishC();
void RecordFishC();
bool WriteFishC(FishOil *OilData);

int main()
{
int i;

InitFishC();
while( 1 )
{
cout << "请选择需要进行的操作: \n";
cout << "1. 打印数据到屏幕\n";
cout << "2. 录入数据\n";
cout << "3. 退出程序\n";
cin >> i;

switch( i )
{
case 1:
if( ReadFishC() )
cout << "成功读取文件^_^\n\n";
else
cout << "读取文件失败T_T\n\n";
break;
case 2:
RecordFishC();
break;
case 3:
return 0;
}
}

cout << "初始化失败T_T......\n\n";

return 0;

}

bool InitFishC()
{
FishOil OilInit;
OilInit.name="小甲鱼";
OilInit.uid="fishc0000";
OilInit.uid='F';
if( WriteFishC(&OilInit)==false )
{
cout << "初始化失败 ";
}


}

bool ReadFishC()
{
string ch;
ifstream fileinput("FishC.txt",ios::in);
cout << "名字" << "号码" << "性别" << "\n";
if( fileinput.is_open() )
{
fileinput >> ch;
std::cout << ch <<"\n";
fileinput.close();
return 1;
}
else
{
return 0;
}

}

void RecordFishC()
{
char save,start;
FishOil *pointdata;
start = 'Y';
while( 'Y'==start )
{
cout << "请输入name ";
cin >> (*pointdata).name ;
cout << "请输入uid ";
cin >> (*pointdata).uid ;
cout << "请输入sex ";
cin >> (*pointdata).sex ;

cout << "录入成功,是否保存Y/N";
cin >> save;
if( save=='Y')
{
if(WriteFishC( pointdata ))
cout << "成功写入" ;
}
else
cout << "失败写入 ";
}


cout << "是否再次录入?";
cin >> start;


}

bool WriteFishC( FishOil *pOilData )
{
ofstream fileOutput("FishC.txt", ios::app);
if( fileOutput.is_open() )
{
fileOutput << pOilData->name <<" ";
fileOutput << pOilData->uid <<" ";
fileOutput << pOilData->sex <<"\n";

fileOutput.close();
cout << "数据成功保存 ";
return 1;
}
else
{
cout << "数据保存失败 ";
return 0;
}
}
————————————————————————————————————————————————————————————————————————————————————————————————————————————————
提示 error C2679: binary '>>' : no operator defined which takes a right-hand operand of type 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' (or there is no accepta
ble conversion)
求大神帮忙!!!!!!!!!!!!!!!!!!感激不尽!
...全文
663 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
JiMoKuangXiangQu 2014-03-26
  • 打赏
  • 举报
回复
少包含了头文件string.
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

struct FishOil
{
	string name;
	string uid;
	char sex;
}; 

bool InitFishC();
bool ReadFishC(); 
void RecordFishC();
bool WriteFishC(FishOil *OilData);

int main()
{
	int i;

	InitFishC();  
	while( 1 )
	{ 
		cout << "请选择需要进行的操作: \n";
		cout << "1. 打印数据到屏幕\n";
		cout << "2. 录入数据\n"; 
		cout << "3. 退出程序\n"; 
		cin >> i;

		switch( i )
		{
		case 1: 
			if( ReadFishC() )
				cout << "成功读取文件^_^\n\n";
			else
				cout << "读取文件失败T_T\n\n";
			break;
		case 2:
			RecordFishC();
			break;
		case 3:
			return 0; 
		}
	}

	cout << "初始化失败T_T......\n\n";

	return 0;

}

bool InitFishC()
{
	FishOil OilInit;
	OilInit.name="小甲鱼";
	OilInit.uid="fishc0000";
	OilInit.uid='F';
	if( WriteFishC(&OilInit)==false )
	{
		cout  << "初始化失败 ";
		return false;
	}
	return true;
} 

bool ReadFishC()
{
	string ch;
	ifstream fileinput("FishC.txt",ios::in);
	cout << "名字" << "号码" << "性别" << "\n";
	if( fileinput.is_open() )
	{
		fileinput >> ch;
		std::cout << ch <<"\n";
		fileinput.close();
		return 1;
	}
	else
	{
		return 0;
	}

}

void RecordFishC()
{
	char save,start;
	FishOil *pointdata; // !!!这里没有初始化
	start = 'Y';
	while( 'Y'==start )
	{
		// !!! pointdata 在没有初始化的前提下就拿来用
		cout << "请输入name ";
		cin >> (*pointdata).name ;
		cout << "请输入uid ";
		cin >> (*pointdata).uid ;
		cout << "请输入sex ";
		cin >> (*pointdata).sex ;

		cout << "录入成功,是否保存Y/N";
		cin >> save;
		if( save=='Y')
		{
			if(WriteFishC( pointdata ))
				cout << "成功写入" ;
		}
		else
			cout << "失败写入 ";
	}


	cout << "是否再次录入?";
	cin >> start;


}

bool WriteFishC( FishOil *pOilData )
{
	ofstream fileOutput("FishC.txt", ios::app);  
	if( fileOutput.is_open() )  
	{
		fileOutput << pOilData->name <<" ";
		fileOutput << pOilData->uid <<" ";
		fileOutput << pOilData->sex <<"\n";

		fileOutput.close();
		cout << "数据成功保存 ";
		return 1;
	}
	else
	{
		cout << "数据保存失败 ";
		return 0;
	}
}
上面的代码可以通过编译.但至少还包含注释里面的逻辑错误.
spaceman10 2014-03-26
  • 打赏
  • 举报
回复
没有重载<<输出符来输出你那个类型的变量。
JiMoKuangXiangQu 2014-03-26
  • 打赏
  • 举报
回复
发现几个逻辑上问题: 1. RecordFishC()中 FishOil *pointdata; // !!!这里没有初始化while( 'Y'==start ) { // !!! pointdata 在没有初始化的前提下就拿来用 cout << "请输入name "; cin >> (*pointdata).name ; ... } 2. InitFishC()中 bool InitFishC() { FishOil OilInit; OilInit.name="小甲鱼"; OilInit.uid="fishc0000"; OilInit.uid='F'; if( WriteFishC(&OilInit)==false ) { cout << "初始化失败 "; return false; // 要加返回值 } return true; // 要加返回值} 其他的没看了.
JiMoKuangXiangQu 2014-03-26
  • 打赏
  • 举报
回复
引用 4 楼 u014026483 的回复:
[quote=引用 1 楼 JiMoKuangXiangQu 的回复:] 发现几个逻辑上问题: 1. RecordFishC()中 FishOil *pointdata; // !!!这里没有初始化while( 'Y'==start ) { // !!! pointdata 在没有初始化的前提下就拿来用 cout << "请输入name "; cin >> (*pointdata).name ; ... } 2. InitFishC()中 bool InitFishC() { FishOil OilInit; OilInit.name="小甲鱼"; OilInit.uid="fishc0000"; OilInit.uid='F'; if( WriteFishC(&OilInit)==false ) { cout << "初始化失败 "; return false; // 要加返回值 } return true; // 要加返回值} 其他的没看了.
这个要初始化吗?不是已经定义了FishOil这个结构了,然后把键盘输入流的数据分别放到结构的成员中吗?不是这样的吗?该怎么弄?帮忙看看好吗,谢谢啊!!!!![/quote] 这里是只是定义了指针,并为定义对象本身.下面的代码简单修改了一下(基于LZ的代码),供参考:
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

struct FishOil
{
	string name;
	string uid;
	char sex;
}; 

bool InitFishC();
bool ReadFishC(); 
void RecordFishC();
bool WriteFishC(FishOil *OilData);

int main()
{
	int i;

	InitFishC();  
	while( 1 )
	{ 
		cout << "请选择需要进行的操作: \n";
		cout << "1. 打印数据到屏幕\n";
		cout << "2. 录入数据\n"; 
		cout << "3. 退出程序\n"; 
		cin >> i;

		switch( i )
		{
		case 1: 
			if( ReadFishC() )
				cout << "成功读取文件^_^\n\n";
			else
				cout << "读取文件失败T_T\n\n";
			break;
		case 2:
			RecordFishC();
			break;
		case 3:
			return 0; 
		}
	}

	cout << "初始化失败T_T......\n\n";

	return 0;

}

bool InitFishC()
{
	FishOil OilInit;
	OilInit.name="小甲鱼";
	OilInit.uid="fishc0000";
	OilInit.sex='F';//OilInit.uid='F'; 大概应该是这样吧
	if( WriteFishC(&OilInit)==false )
	{
		cout  << "初始化失败 ";
		return false;
	}
	return true;
} 

bool ReadFishC()
{
	string ch;
	ifstream fileinput("FishC.txt",ios::in);
	cout << "名字" << "号码" << "性别" << "\n";
	if( fileinput.is_open() )
	{
		fileinput >> ch;
		std::cout << ch <<"\n";
		fileinput.close();
		return 1;
	}
	else
	{
		return 0;
	}

}

void RecordFishC()
{
	char save,start;
	FishOil fish;//FishOil *pointdata; // !!!这里没有初始化
	start = 'Y';
	while( 'Y'==start )
	{
		// !!! pointdata 在没有初始化的前提下就拿来用
		cout << "请输入name ";
		cin >> fish.name; //cin >> (*pointdata).name ;
		cout << "请输入uid ";
		cin >> fish.uid; //cin >> (*pointdata).uid ;
		cout << "请输入sex ";
		cin >> fish.sex; //cin >> (*pointdata).sex ;

		cout << "录入成功,是否保存Y/N";
		cin >> save;
		if( save=='Y')
		{
			if(WriteFishC( &fish /*pointdata*/ ))
				cout << "成功写入" ;
		}
		else
			cout << "失败写入 ";

		cout << "是否再次录入?";
		cin >> start;
	}

	//cout << "是否再次录入?";
	//cin >> start;
}

bool WriteFishC( FishOil *pOilData )
{
	ofstream fileOutput("FishC.txt", ios::app);  
	if( fileOutput.is_open() )  
	{
		fileOutput << pOilData->name <<" ";
		fileOutput << pOilData->uid <<" ";
		fileOutput << pOilData->sex <<"\n";

		fileOutput.close();
		cout << "数据成功保存 ";
		return 1;
	}
	else
	{
		cout << "数据保存失败 ";
		return 0;
	}
}
奔跑的鸭蛋 2014-03-26
  • 打赏
  • 举报
回复
引用 4 楼 u014026483 的回复:
[quote=引用 1 楼 JiMoKuangXiangQu 的回复:] 发现几个逻辑上问题: 1. RecordFishC()中 FishOil *pointdata; // !!!这里没有初始化while( 'Y'==start ) { // !!! pointdata 在没有初始化的前提下就拿来用 cout << "请输入name "; cin >> (*pointdata).name ; ... } 2. InitFishC()中 bool InitFishC() { FishOil OilInit; OilInit.name="小甲鱼"; OilInit.uid="fishc0000"; OilInit.uid='F'; if( WriteFishC(&OilInit)==false ) { cout << "初始化失败 "; return false; // 要加返回值 } return true; // 要加返回值} 其他的没看了.
这个要初始化吗?不是已经定义了FishOil这个结构了,然后把键盘输入流的数据分别放到结构的成员中吗?不是这样的吗?该怎么弄?帮忙看看好吗,谢谢啊!!!!![/quote]解决了,哈哈哈哈,谢谢你了!
奔跑的鸭蛋 2014-03-26
  • 打赏
  • 举报
回复
引用 3 楼 JiMoKuangXiangQu 的回复:
少包含了头文件string.
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

struct FishOil
{
	string name;
	string uid;
	char sex;
}; 

bool InitFishC();
bool ReadFishC(); 
void RecordFishC();
bool WriteFishC(FishOil *OilData);

int main()
{
	int i;

	InitFishC();  
	while( 1 )
	{ 
		cout << "请选择需要进行的操作: \n";
		cout << "1. 打印数据到屏幕\n";
		cout << "2. 录入数据\n"; 
		cout << "3. 退出程序\n"; 
		cin >> i;

		switch( i )
		{
		case 1: 
			if( ReadFishC() )
				cout << "成功读取文件^_^\n\n";
			else
				cout << "读取文件失败T_T\n\n";
			break;
		case 2:
			RecordFishC();
			break;
		case 3:
			return 0; 
		}
	}

	cout << "初始化失败T_T......\n\n";

	return 0;

}

bool InitFishC()
{
	FishOil OilInit;
	OilInit.name="小甲鱼";
	OilInit.uid="fishc0000";
	OilInit.uid='F';
	if( WriteFishC(&OilInit)==false )
	{
		cout  << "初始化失败 ";
		return false;
	}
	return true;
} 

bool ReadFishC()
{
	string ch;
	ifstream fileinput("FishC.txt",ios::in);
	cout << "名字" << "号码" << "性别" << "\n";
	if( fileinput.is_open() )
	{
		fileinput >> ch;
		std::cout << ch <<"\n";
		fileinput.close();
		return 1;
	}
	else
	{
		return 0;
	}

}

void RecordFishC()
{
	char save,start;
	FishOil *pointdata; // !!!这里没有初始化
	start = 'Y';
	while( 'Y'==start )
	{
		// !!! pointdata 在没有初始化的前提下就拿来用
		cout << "请输入name ";
		cin >> (*pointdata).name ;
		cout << "请输入uid ";
		cin >> (*pointdata).uid ;
		cout << "请输入sex ";
		cin >> (*pointdata).sex ;

		cout << "录入成功,是否保存Y/N";
		cin >> save;
		if( save=='Y')
		{
			if(WriteFishC( pointdata ))
				cout << "成功写入" ;
		}
		else
			cout << "失败写入 ";
	}


	cout << "是否再次录入?";
	cin >> start;


}

bool WriteFishC( FishOil *pOilData )
{
	ofstream fileOutput("FishC.txt", ios::app);  
	if( fileOutput.is_open() )  
	{
		fileOutput << pOilData->name <<" ";
		fileOutput << pOilData->uid <<" ";
		fileOutput << pOilData->sex <<"\n";

		fileOutput.close();
		cout << "数据成功保存 ";
		return 1;
	}
	else
	{
		cout << "数据保存失败 ";
		return 0;
	}
}
上面的代码可以通过编译.但至少还包含注释里面的逻辑错误.
谢谢,谢谢!少了头文件,呵呵!
奔跑的鸭蛋 2014-03-26
  • 打赏
  • 举报
回复
引用 1 楼 JiMoKuangXiangQu 的回复:
发现几个逻辑上问题: 1. RecordFishC()中 FishOil *pointdata; // !!!这里没有初始化while( 'Y'==start ) { // !!! pointdata 在没有初始化的前提下就拿来用 cout << "请输入name "; cin >> (*pointdata).name ; ... } 2. InitFishC()中 bool InitFishC() { FishOil OilInit; OilInit.name="小甲鱼"; OilInit.uid="fishc0000"; OilInit.uid='F'; if( WriteFishC(&OilInit)==false ) { cout << "初始化失败 "; return false; // 要加返回值 } return true; // 要加返回值} 其他的没看了.
这个要初始化吗?不是已经定义了FishOil这个结构了,然后把键盘输入流的数据分别放到结构的成员中吗?不是这样的吗?该怎么弄?帮忙看看好吗,谢谢啊!!!!!

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧