关于vector的问题,可能很简单

redoffice 2008-02-25 04:07:16
我的问题是这样的

if( bNotifyLayout && pTmpRoot )
//pTmpRoot->CheckPageDescs( (SwPageFrm*)pTmpRoot->Lower() ); //原来的代码


std::vector<SwRootFrm*> aAllLayout = GetAllLayouts();//修改后的代码
std::for_each( aAllLayout.begin(), aAllLayout.end(), allCheckPageDescs );//修改后的代码

解释一下:

由于原来的代码仅仅是对当前的Layout进行操作,而这里是要对容器中的所有layout都进行操作,那么我想到了for_each函数,并且定义了GetAllLayout函数
函数定义没有问题。
但是现在编译报错,
error C2440: 'initializing'
: cannot convert from 'SwRootFrm *' to '_STL::vector<_Tp> &'
with
[
_Tp=SwRootFrm
]

请问大侠们这是什么问题?是不是我在使用的时候出什么问题了?
谢谢
...全文
312 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
systemthink 2008-02-27
  • 打赏
  • 举报
回复
问题解决了 只能接点分了
redoffice 2008-02-26
  • 打赏
  • 举报
回复
重新贴一下代码吧,上面的太乱了,这事改后的。各位再看看,为什么编译报错说找不到mem_fun_ref呢?有人说是命名空间的问题,可是加上std还是
出类似的问题。

std::vector<SwRootFrm*> GetAllLayouts();


if( bNotifyLayout && pTmpRoot )
{
std::vector<SwRootFrm*> aAllLayout=GetAllLayouts();
std::for_each( aAllLayout.begin(), aAllLayout.end(), mem_fun_ref(&SwFrm::CheckPageDescs));
}

std::vector <SwRootFrm*> SwDoc::GetAllLayouts(){
vector<SwRootFrm*> aAllLayouts;
ViewShell *pStart = GetCurrentViewShell();
ViewShell *pTemp = pStart;
do {
if (pTemp->GetLayout()) {
aAllLayouts.push_back(pTemp->GetLayout());
pTemp = (ViewShell*)pTemp->GetNext();
}
} while(pTemp!=pStart);
return aAllLayouts;
}
redoffice 2008-02-26
  • 打赏
  • 举报
回复
上面的倒是改好了,可是现在编译器报错说
std::for_each( aAllLayout.begin(), aAllLayout.end(),mem_fun_ref(&SwRootFrm::AllCheckPageDescs));

error C3861: 'mem_fun': identifier not found, even with argument-dependent lookup

是不是namespace的问题?
redoffice 2008-02-26
  • 打赏
  • 举报
回复
回答楼上:
1.CheckPageDescs是静态成员函数。
2.传错了,应该用mem_fun这个函数。谢谢指点。

感谢以上各位,问题已经解决,这是解决后的代码,贴出来一起学习,
我只是编译通过并实现功能,不知道还有什么缺陷,大家可以指正
----------------------------------------------------------------------------
+ std::vector<SwRootFrm*> GetAllLayouts();

---------------------------------------------------------------------------

+ {
+ std::vector<SwRootFrm*> aAllLayout=GetAllLayouts();
+ std::for_each( aAllLayout.begin(), aAllLayout.end(), std::mem_fun(&SwRootFrm::AllCheckPageDescs));
+ }

-------------------------------------------------------------------------------
+ std::vector <SwRootFrm*> SwDoc::GetAllLayouts(){
+ std::vector<SwRootFrm*> aAllLayouts;
+ ViewShell *pStart = GetCurrentViewShell();
+ ViewShell *pTemp = pStart;
+ do {
+ if (pTemp->GetLayout()) {
+ aAllLayouts.push_back(pTemp->GetLayout());
+ pTemp = (ViewShell*)pTemp->GetNext();
+ }
+ } while(pTemp!=pStart);
+ return aAllLayouts;
+ }

-----------------------------------------------------------------
+ void SwRootFrm::AllCheckPageDescs()const
+ {
+ CheckPageDescs( (SwPageFrm*)this->Lower() );
+ }

--------------------------------------------------------------------

+ void AllCheckPageDescs()const;
redoffice 2008-02-26
  • 打赏
  • 举报
回复
回答楼上:
1.CheckPageDescs是静态成员函数。
2.传错了,应该用mem_fun这个函数。谢谢指点。

感谢以上各位,问题已经解决,这是解决后的代码,贴出来一起学习,
我只是编译通过并实现功能,不知道还有什么缺陷,大家可以指正
----------------------------------------------------------------------------
+ std::vector<SwRootFrm*> GetAllLayouts();

---------------------------------------------------------------------------

+ {
+ std::vector<SwRootFrm*> aAllLayout=GetAllLayouts();
+ std::for_each( aAllLayout.begin(), aAllLayout.end(), std::mem_fun(&SwRootFrm::AllCheckPageDescs));
+ }

-------------------------------------------------------------------------------
+ std::vector <SwRootFrm*> SwDoc::GetAllLayouts(){
+ std::vector<SwRootFrm*> aAllLayouts;
+ ViewShell *pStart = GetCurrentViewShell();
+ ViewShell *pTemp = pStart;
+ do {
+ if (pTemp->GetLayout()) {
+ aAllLayouts.push_back(pTemp->GetLayout());
+ pTemp = (ViewShell*)pTemp->GetNext();
+ }
+ } while(pTemp!=pStart);
+ return aAllLayouts;
+ }

-----------------------------------------------------------------
+ void SwRootFrm::AllCheckPageDescs()const
+ {
+ CheckPageDescs( (SwPageFrm*)this->Lower() );
+ }

--------------------------------------------------------------------

+ void AllCheckPageDescs()const;
redoffice 2008-02-26
  • 打赏
  • 举报
回复
回答楼上:
1.CheckPageDescs是静态成员函数。
2.传错了,应该用mem_fun这个函数。谢谢指点。

感谢以上各位,问题已经解决,这是解决后的代码,贴出来一起学习,
我只是编译通过并实现功能,不知道还有什么缺陷,大家可以指正
----------------------------------------------------------------------------
+ std::vector<SwRootFrm*> GetAllLayouts();

---------------------------------------------------------------------------

+ {
+ std::vector<SwRootFrm*> aAllLayout=GetAllLayouts();
+ std::for_each( aAllLayout.begin(), aAllLayout.end(), std::mem_fun(&SwRootFrm::AllCheckPageDescs));
+ }

-------------------------------------------------------------------------------
+ std::vector <SwRootFrm*> SwDoc::GetAllLayouts(){
+ std::vector<SwRootFrm*> aAllLayouts;
+ ViewShell *pStart = GetCurrentViewShell();
+ ViewShell *pTemp = pStart;
+ do {
+ if (pTemp->GetLayout()) {
+ aAllLayouts.push_back(pTemp->GetLayout());
+ pTemp = (ViewShell*)pTemp->GetNext();
+ }
+ } while(pTemp!=pStart);
+ return aAllLayouts;
+ }

-----------------------------------------------------------------
+ void SwRootFrm::AllCheckPageDescs()const
+ {
+ CheckPageDescs( (SwPageFrm*)this->Lower() );
+ }

--------------------------------------------------------------------

+ void AllCheckPageDescs()const;
redoffice 2008-02-26
  • 打赏
  • 举报
回复
回答楼上:
1.CheckPageDescs是静态成员函数。
2.传错了,应该用mem_fun这个函数。谢谢指点。

感谢以上各位,问题已经解决,这是解决后的代码,贴出来一起学习,
我只是编译通过并实现功能,不知道还有什么缺陷,大家可以指正
----------------------------------------------------------------------------
+ std::vector<SwRootFrm*> GetAllLayouts();

---------------------------------------------------------------------------

+ {
+ std::vector<SwRootFrm*> aAllLayout=GetAllLayouts();
+ std::for_each( aAllLayout.begin(), aAllLayout.end(), std::mem_fun(&SwRootFrm::AllCheckPageDescs));
+ }

-------------------------------------------------------------------------------
+ std::vector <SwRootFrm*> SwDoc::GetAllLayouts(){
+ std::vector<SwRootFrm*> aAllLayouts;
+ ViewShell *pStart = GetCurrentViewShell();
+ ViewShell *pTemp = pStart;
+ do {
+ if (pTemp->GetLayout()) {
+ aAllLayouts.push_back(pTemp->GetLayout());
+ pTemp = (ViewShell*)pTemp->GetNext();
+ }
+ } while(pTemp!=pStart);
+ return aAllLayouts;
+ }

-----------------------------------------------------------------
+ void SwRootFrm::AllCheckPageDescs()const
+ {
+ CheckPageDescs( (SwPageFrm*)this->Lower() );
+ }

--------------------------------------------------------------------

+ void AllCheckPageDescs()const;
qynum123 2008-02-26
  • 打赏
  • 举报
回复
mem_fun_ref(&SwFrm::CheckPageDescs)不知你为什么要这样用,这个地方应该是一个函数名(即函数的指针)
有几个问题:
1、CheckPageDescs是静态成员函数吗?如果不是,你这么用SwFrm::CheckPageDescs是有问题的
2、CheckPageDescs是模板函数,如果不是,就不要用mem_fun_ref,如果是你怎么没有传类型给这个函数呢?
qynum123 2008-02-25
  • 打赏
  • 举报
回复
你分开写试试,估计还是GetAllLayouts()的问题
std::vector<SwRootFrm*> aAllLayout;
aAllLayout = GetAllLayouts();
redoffice 2008-02-25
  • 打赏
  • 举报
回复
嗯,了解了,可是现在编译器报错说
std::vector <SwRootFrm*> aAllLayout = GetAllLayouts();

变量aAllLayout 没有定义?晕啊
qynum123 2008-02-25
  • 打赏
  • 举报
回复
vector<SwRootFrm*> SwDoc::GetAllLayouts(){
vector <SwRootFrm*> aAllLayouts;
SwRootFrm *pStart = GetCurrentViewShell();
SwRootFrm *pTemp = pStart;
do {
if (pTemp-> GetLayout()) {
aAllLayouts.push_back(pTemp);
pTemp = (SwRootFrm*)pTemp-> GetNext();
}
} while(pTemp!=pStart);
return aAllLayouts;
}
稍微给你改了一下,我不知道你的SwRootFrm和ViewShell*是什么关系。
qynum123 2008-02-25
  • 打赏
  • 举报
回复
SwRootFrm *SwDoc::GetAllLayouts(){ //这里你返回的是一个指向SwRootFrm*的指针
vector <SwRootFrm> aAllLayouts; //你定义的是一个Vector对象
ViewShell *pStart = GetCurrentViewShell();
ViewShell *pTemp = pStart;
do {
if (pTemp-> GetLayout()) {
aAllLayouts.push_back(pTemp); //这里你往Vector的存的是ViewShell*,而你定义的时候为SwRootFrm
pTemp = (ViewShell*)pTemp-> GetNext();
}
} while(pTemp!=pStart);
return aAllLayouts; //你返回一个对象给一个指针,明显不对
}

根据你自己的需要改吧!
hai040 2008-02-25
  • 打赏
  • 举报
回复
vector <SwRootFrm>*!=vector <SwRootFrm*>
redoffice 2008-02-25
  • 打赏
  • 举报
回复
嗯,我怀疑是返回值的问题
请问楼上,应该返回什么?
谢谢
qynum123 2008-02-25
  • 打赏
  • 举报
回复
你把这条语句分开写试试,看编译的时候错误指在什么地方:
std::vector <SwRootFrm*> aAllLayout;
aAllLayout = GetAllLayouts();//修改后的代码
估计是你的GetAllLayouts返回的是一个Vector的引用,返回的不对!把它的定义列出来看看。
hai040 2008-02-25
  • 打赏
  • 举报
回复
getalllayerout返回什么
redoffice 2008-02-25
  • 打赏
  • 举报
回复
回楼上,哪里不明白呢?
回楼上的楼上,还没编译到那里

莫非是我定义的函数的问题?
定义函数如下:
SwRootFrm *SwDoc::GetAllLayouts(){
vector<SwRootFrm> aAllLayouts;
ViewShell *pStart = GetCurrentViewShell();
ViewShell *pTemp = pStart;
do {
if (pTemp->GetLayout()) {
aAllLayouts.push_back(pTemp);
pTemp = (ViewShell*)pTemp->GetNext();
}
} while(pTemp!=pStart);
return aAllLayouts;
}
hityct1 2008-02-25
  • 打赏
  • 举报
回复
没说明白,详细一些吧。
Supper_Jerry 2008-02-25
  • 打赏
  • 举报
回复
应该是allCheckPageDescs 定义出错。
redoffice 2008-02-25
  • 打赏
  • 举报
回复
顶一下,请大侠解释啊
加载更多回复(2)

64,648

社区成员

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

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