0
   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     }

为什么编译器说:

错误:非本地函数 'Pet::RoleExternModel::getShareConfig(Pet::SourceList&, std::vector >&, Pet::ShopModel&)::Fun Pet::fun()' 使用本地类型 'Pet::RoleExternModel ::getShareConfig(Pet::SourceList&, std::vector >&, Pet::ShopModel&)::Fun'</p>

如何使其合法化?

4

2 回答 2

2

这条线是问题所在:

Fun fun();

它声明了一个不带参数并返回一个对象的函数名称。funFun

这被称为最令人头疼的解析

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

于 2012-08-13T06:19:58.507 回答
0

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

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

于 2012-08-13T08:02:02.553 回答