次のようなエラーが表示されます。
Error 24 error C2440: 'initializing' : cannot convert from 'std::_List_const_iterator<_Mylist>' to 'AttrValue' c:\program files (x86)\microsoft visual studio 10.0\vc\include\xmemory 208
Error 25 error C2100: illegal indirection c:\program files (x86)\microsoft visual studio 10.0\vc\include\xrefwrap 49
Error 26 error C2296: '.*' : illegal, left operand has type 'AttrValue' c:\program files (x86)\microsoft visual studio 10.0\vc\include\xrefwrap 49
Error 37 error C2440: 'initializing' : cannot convert from 'std::_List_const_iterator<_Mylist>' to 'AttrValue' c:\program files (x86)\microsoft visual studio 10.0\vc\include\xmemory 208
Error 38 error C2100: illegal indirection c:\program files (x86)\microsoft visual studio 10.0\vc\include\xrefwrap 49
Error 39 error C2296: '.*' : illegal, left operand has type 'AttrValue' c:\program files (x86)\microsoft visual studio 10.0\vc\include\xrefwrap 49
それは私のコードを指していないので、何が悪いのか正確にはわかりません。しかし、MSDN のドキュメントを見て、次のような問題が原因である可能性があると考えていました。
function<bool(AttrValue)> QueryEvaluatorPrivate::getClausePredicate(Relation clauseType, int preferedIndex) {
switch (clauseType) {
case UsesRelation:
if (preferedIndex == 0)
return &QueryEvaluatorPrivate::hasVarsUsed;
return &QueryEvaluatorPrivate::hasStmtsUsing;
case UsesPRelation:
if (preferedIndex == 0)
return &QueryEvaluatorPrivate::hasVarsUsedInProc;
return &QueryEvaluatorPrivate::hasProcsUsing;
}
}
hasVarsUsed
およびその他のhas*
関数は、 を返す関数にすぎませんbool
。これに何か問題がありますか?
アップデート
@Cameron のコメントに続いて、出力ウィンドウに output が表示されます。output.insert(x)
問題のある行は(最後の行)だと思います:
...
function<bool(AttrValue)> clausePredicate = getClausePredicate(cl.type, prefered);
unordered_set<AttrValue> output;
if (prefered == pos) {
for (auto x = input.begin(); x != input.end(); ++x)
if (clausePredicate(*x))
output.insert(x);
...
しかし、それの何が問題なのですか?多分私は間違った場所を見ていますか?
更新 2
output.insert(x)
最初の問題を修正しましたoutput.insert(*x)
...しかし、私は持っています
Error 6 error C2100: illegal indirection c:\program files (x86)\microsoft visual studio 10.0\vc\include\xrefwrap 49
問題のある行は次のとおりだと思います。
return &QueryEvaluatorPrivate::hasVarsUsed;
私はおそらく関数を間違って返していますか?
// function declaration
bool QueryEvaluatorPrivate::hasVarsUsed(StmtNum s)