operator>>重载,郁闷掉了

hxxwcc 2008-08-25 10:52:35


template<typename T1, typename T2>
std::istream& operator>>(std::istream& in, std::pair<T1, T2>& rhs)
{
in>>rhs.first>>rhs.second;
return in;
}

template<class T>
void accept_any(T)
{}

int main(int argc,char* argv[])
{
typedef pair<int, int> Element;
typedef vector<Element> DataType;

Element e;
ifstream *read;
DataType *data;

accept_any(istream_iterator<Element>(*read) );//通过不了
*read >> e; //可以通过
return 0;
}


报错信息:
D:\Program Files\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\include\c++\3.4.5\bits\stream_iterator.h|119|error: no match for 'operator>>' in '*((std::istream_iterator<mainColumn(int, char**)::Element, char, std::char_traits<char>, ptrdiff_t>*)this)->std::istream_iterator<mainColumn(int, char**)::Element, char, std::char_traits<char>, ptrdiff_t>::_M_stream >> ((std::istream_iterator<mainColumn(int, char**)::Element, char, std::char_traits<char>, ptrdiff_t>*)this)->std::istream_iterator<mainColumn(int, char**)::Element, char, std::char_traits<char>, ptrdiff_t>::_M_value'|

报错的源代码位置:stream_iterator.h(included by <iterator>)中,istream_iterator类中,

void _M_read()
{
_M_ok = (_M_stream && *_M_stream) ? true : false;
if (_M_ok)
{
*_M_stream >> _M_value;//这里报错
_M_ok = *_M_stream ? true : false;
}
}


想不通的是,
*read >> e; 可以通过编译
accept_any(istream_iterator<Element>(*read) );却通过不了编译

求助,吃饭去了,解决了就结贴哦,50分吧:)
...全文
277 22 打赏 收藏 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
hxxwcc 2008-08-25
  • 打赏
  • 举报
回复
恩,这个函数不是关键阿,关键是编译器找不到我自己定义的operator>>()
jieao111 2008-08-25
  • 打赏
  • 举报
回复
T是参数类型吧
hxxwcc 2008-08-25
  • 打赏
  • 举报
回复
回15楼:
why不行捏?对于built-in类型完全通过

回16楼:
function template可以参数推导,大家用std::max向来是max(1,2);这样使用的
函数参数是T
jieao111 2008-08-25
  • 打赏
  • 举报
回复
首先,这个函数写的都不对,这个是有函数体的,它的参数是什么?
template<class T>
void accept_any(T)
{}
太乙 2008-08-25
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 hxxwcc 的回复:]
回12楼:
恩,配合std::copy算法阿,以前写的代码是这样的:

C/C++ code
copy(istream_iterator<Element>(*(this->read) ),
istream_iterator<Element>(),
back_insert_iterator<DataType>(*(this->data) ) );




我应该所有地方都符合定义了阿。。。
却卡在了operator>>这里阿
[/Quote]

这代码也行?
太乙 2008-08-25
  • 打赏
  • 举报
回复


#include <iostream>
#include <iterator>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
ifstream ifs("test.txt");
istream_iterator<string> ibeg(ifs);
istream_iterator<string> iend;
vector<string> vec(ibeg, iend);

copy(vec.begin(), vec.end(),
ostream_iterator<string>(cout, "\n"));
return 0;
}

hxxwcc 2008-08-25
  • 打赏
  • 举报
回复
回12楼:
恩,配合std::copy算法阿,以前写的代码是这样的:

copy(istream_iterator<Element>(*(this->read) ),
istream_iterator<Element>(),
back_insert_iterator<DataType>(*(this->data) ) );


我应该所有地方都符合定义了阿。。。
却卡在了operator>>这里阿
太乙 2008-08-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 hxxwcc 的回复:]
引用 1 楼 coverallwangp 的回复:
ifstream *read;把这个改成istream *read

试过了,不行的。。。

回2楼:
accept_any(istream_iterator < int >(*read) );//Element 这里不对
我重载为std::pair类重载了operator>>就是为了能够对pair对象使用>>阿,嘿嘿

回6楼,
头文件偶当然包含了阿,你能不能编译通过?我copy到我的IDE里通过不了
(accept_any(istream_iterator <Element>(*read) );)

回8楼:不素…
[/Quote]

不就是想申明一个ifstream变量read,然后从这个里面流入数据么?
hxxwcc 2008-08-25
  • 打赏
  • 举报
回复
另补充:初始化与否不影响编译的。。。
hxxwcc 2008-08-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 coverallwangp 的回复:]
ifstream *read;把这个改成istream *read
[/Quote]
试过了,不行的。。。

回2楼:
accept_any(istream_iterator< int >(*read) );//Element 这里不对
我重载为std::pair类重载了operator>>就是为了能够对pair对象使用>>阿,嘿嘿

回6楼,
头文件偶当然包含了阿,你能不能编译通过?我copy到我的IDE里通过不了
(accept_any(istream_iterator<Element>(*read) );)

回8楼:不素滴

谢谢大家的回复,一起继续想象办法吧
jiqing_gao 2008-08-25
  • 打赏
  • 举报
回复
up

太乙 2008-08-25
  • 打赏
  • 举报
回复


#include <iostream>
#include <vector>
#include <fstream>
#include <iterator>
using namespace std;

template<typename T1, typename T2>
std::istream& operator>>(std::istream& in, std::pair <T1, T2>& rhs)
{
in>>rhs.first>>rhs.second;
return in;
}

template<class T>
void accept_any(T)
{}

int main(int argc,char* argv[])
{
typedef pair<int, int> Element;
typedef vector<Element> DataType;

Element e;
DataType *data;
istream_iterator<Element> read(ifstream) ;
accept_any(read);//通过不了
return 0;
}







lz要的是不是这效果?
lzr4304061988012 2008-08-25
  • 打赏
  • 举报
回复
up ls
K行天下 2008-08-25
  • 打赏
  • 举报
回复


#include <iostream>
#include <fstream>
#include <vector>
#include <iterator>//注意头文件的包含
using namespace std;

template<typename T1, typename T2>
std::istream& operator>>(std::istream& in, std::pair<T1, T2>& rhs)
{
in>>rhs.first>>rhs.second;
return in;
}

template<class T>
void accept_any(T)
{}

int main(int argc,char* argv[])
{
typedef pair<int, int> Element;
typedef vector<Element> DataType;

Element e;
ifstream read("1.txt");//要初始化
DataType *data;

accept_any(istream_iterator< int >(read) );//Element 这里不对
read >> e;
return 0;
}


hbprotoss 2008-08-25
  • 打赏
  • 举报
回复
顶一下
e_sharp 2008-08-25
  • 打赏
  • 举报
回复
UP
deerwin1986 2008-08-25
  • 打赏
  • 举报
回复
帮顶~
太乙 2008-08-25
  • 打赏
  • 举报
回复


#include <iostream>
#include <vector>
#include <fstream>
#include <iterator>
using namespace std;

template<typename T1, typename T2>
std::istream& operator>>(std::istream& in, std::pair<T1, T2>& rhs)
{
in>>rhs.first>>rhs.second;
return in;
}

template<class T>
void accept_any(T)
{}

int main(int argc,char* argv[])
{
typedef pair<int, int> Element;
typedef vector<Element> DataType;

Element e;
ifstream *read;
DataType *data;

accept_any(istream_iterator< int >(*read) );//Element 这里不对
*read >> e; //可以通过
return 0;
}



coverallwangp 2008-08-25
  • 打赏
  • 举报
回复
ifstream *read;把这个改成istream *read
hxxwcc 2008-08-25
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 yi_jun_jun 的回复:]
C/C++ codenamespace std
{
template<typename T1, typename T2>
std::istream& operator>>(std::istream& in, std::pair<T1, T2>& rhs)
{
in>>rhs.first>>rhs.second;
return in;
}



你修改成以上代码,再试一试,我在gcc上搞定了。
[/Quote]

大善。马上结贴去。谢谢了
加载更多回复(2)
【空间辨识】一致模态指标与模态参与因子的随机子空间辨识研究(Matlab代码实现)内容概要:本文研究了一致模态指标与模态参与因子在随机子空间辨识中的应用,重点探讨了如何利用Matlab实现空间辨识方法对动态系统模态参数进行精确估计。文中详细介绍了含噪重复瞬态信号的构成特征,分析了传统信号处理方法如经验模态分解、小波变换和常规变分模态分解在低信噪比环境下存在的模态混叠、端点效应及对瞬态特征识别能力不足等问题。针对这些问题,提出了一种融合变分自适应分解、多谐波特征耦合识别与对偶模式追踪机制的新方法,能够有效剥离噪声、精准匹配并追踪重复瞬态分量。该方法通过四个阶段实现:信号预处理、多谐波特征提取、对偶模式迭代追踪和信号重构优化,显著提升了复杂工况下微弱瞬态信号的提取精度与鲁棒性。试验部分通过仿真与工程实测数据验证了所提方法在不同噪声强度和瞬态形态下的优越性能。; 适合人群:具备一定信号处理基础和Matlab编程能力,从事机械故障诊断、结构健康监测、振动分析等相关领域的研究生及科研人员。; 使用场景及目标:①解决工程实践中被强噪声掩盖的重复瞬态信号提取难题;②提升机械设备早期故障特征识别能力;③为模态参数辨识、状态监测与故障预警提供技术支持; 阅读建议:建议结合Matlab代码深入理解算法实现细节,重点关注多谐波耦合识别与对偶追踪机制的设计逻辑,并通过仿真与实测数据对比分析验证方法有效性。
内容概要:本文围绕基于PID优化和矢量控制装置的四旋翼无人机系统展开,重点介绍了其在Matlab&Simulink环境下的建模与仿真方法。文中系统阐述了四旋翼无人机的动力学建模过程,深入分析了PID控制参数的优化策略与矢量控制装置的设计原理,并通过Simulink平台搭建完整的飞行控制系统模型,实现了对无人机姿态、位置的高精度控制。研究结合实际飞行需求,对控制系统的抗干扰能力、动态响应性能及运行稳定性进行了全面评估,通过仿真结果验证了所提出控制策略的有效性与可行性。此外,文章还探讨了该技术在无人机路径规划、协同控制以及复杂环境下的自主飞行任务中的广泛应用前景。; 适合人群:具备自动控制理论基础和Matlab/Simulink使用经验的高校学生、科研人员及从事无人机系统开发的工程技术人员。; 使用场景及目标:①掌握四旋翼无人机的动力学建模与飞控系统设计方法;②学习PID参数整定与矢量控制策略的实现技巧;③利用Simulink进行控制系统仿真与性能分析,提升对非线性、多变量系统控制的理解与实践能力。; 阅读建议:建议读者结合文中提供的仿真模型逐步操作,重点关注控制模块的搭建逻辑与参数设置细节,同时可延伸学习现代控制理论如LQR、MPC等先进算法在无人机控制中的应用,以深化对控制系统优化的认知。
内容概要:本文系统研究了基于预测模型嵌入的自适应转速观测方法,重点剖析其在零速带载条件下的可观测性增强机理,并依托Simulink平台完成仿真实现。文章深入探讨永磁同步电机(PMSM)无位置传感器控制中的核心技术难题,尤其聚焦于低速与零速工况下转速及转子位置观测所面临的稳定性差、精度低等挑战,提出了一种融合预测模型与自适应调节机制的新型观测器架构。该方法通过引入模型预测控制(MPC)与模型参考自适应系统(MRAS)的协同工作机制,有效提升了观测器在全速域范围内的动态响应性能与系统鲁棒性,特别增强了零速启动及带载运行时的状态收敛能力。研究还构建了完整的电机控制与观测一体化Simulink仿真模型,为高性能电机驱动系统的算法设计与工程优化提供了坚实的理论依据与实践验证平台。; 适合人群:具备自动控制理论、电机驱动或电力电子技术背景,熟练掌握Matlab/Simulink仿真工具,从事电气工程、自动化控制、新能源汽车电驱系统或工业伺服系统研发工作的工程师与高年级研究生。; 使用场景及目标:①深入理解永磁同步电机无感控制中自适应转速观测器的设计原理与实现细节;②掌握基于Simulink的电机控制系统建模、仿真与调试方法;③研究并解决零速带载条件下系统可观测性弱、状态估计难以收敛的关键技术问题;④为高性能伺服驱动、电动汽车电驱系统等实际应用场景提供先进观测算法的设计思路与优化方案。; 阅读建议:建议读者结合提供的Simulink模型进行同步操作与参数调试,重点关注观测器结构设计、自适应律构建、参数整定流程及不同工况下的仿真结果对比分析,深入理解预测模型与自适应机制融合所带来的性能提升机理。

65,213

社区成员

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

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