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コピーでき、更新されません。funfun.pairs

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

于 2012-08-13T08:02:02.553 に答える