非本地函数调用本地类型

时间:2012-08-13 03:59:09

标签: c++

   432     void RoleExternModel::getShareConfig(SourceList& sourceList, std::vector<UInt16>& packs, ShopModel& shopModel)
   433     {
   434         std::copy(Packs, Packs + SHARE_PRIZE, std::insert_iterator<std::vector<UInt16> >(packs, packs.begin()));
   435         struct Fun {
   436             std::vector<std::pair<UInt16, UInt8> > pairs;
   437             void operator () (UInt16 type) {
   438                 pairs.push_back(std::make_pair<UInt16, UInt8>(type, Configuration::PACKS));
   439             }
   440         };
   441         Fun fun();
   442         std::for_each(Packs, Packs + SHARE_PRIZE, fun);
   443         shopModel shopModel(fun.pairs);
   444         shopModel.load(sourceList);
   445     }
为什么编译器说:

  

错误:非本地功能   “宠物:: RoleExternModel :: getShareConfig(宠物:: SOURCELIST和放大器;,   std :: vector&gt;&amp;,   Pet :: ShopModel&amp;):: Fun Pet :: fun()'使用本地类型   “宠物:: RoleExternModel :: getShareConfig(宠物:: SOURCELIST和放大器;,   std :: vector&gt;&amp;,   宠物:: ShopModel&安培)::娱乐”

如何制作legel?

2 个答案:

答案 0 :(得分:2)

这一行是问题所在:

Fun fun();

它声明一个函数名称fun,它不带参数并返回一个Fun对象。

这称为the most vexing parse

删除括号,然后声明一个名为fun的对象。

答案 1 :(得分:0)

其他答案在技术上对编译器错误是正确的,但错过了一个微妙的点:fun使用不正确。它似乎是一个局部变量,用于收集fun.pairs中的结果。但是,std::for_each可以复制fun,然后fun.pairs不会更新。

正确的解决方案:Fun fun = std::for_each(Packs, Packs + SHARE_PRIZE, Fun());