2
내가 VS2008에서가 아니라 같은 작동 G ++에서 작동하는 코드가 있습니다G ++의 익명 펑션?
struct IIterationFunctor
{
virtual bool operator()(SStateInfo& rStateInfo) = 0;
virtual ~IIterationFunctor() { }
};
struct SNumItemsFunctor : public IIterationFunctor
{
SNumItemsFunctor (uint8& nNumItems, uint8 nItemType)
: m_nNumItems (nNumItems)
, m_nItemType (nItemType)
{
m_nNumItems = 0;
}
virtual bool operator() (SStateInfo& rStateInfo)
{
if(rStateInfo.sState.nItemType == m_nItemType)
{
++m_nNumItems;
}
return true;
}
uint8& m_nNumItems;
uint8 m_nItemType
};
void IterateStateInfo(IIterationFunctor& functor)
{
for (TStateInfoIterator itStateInfo = m_lstStateInfos.Begin();
itStateInfo != m_lstStateInfos.End();
itStateInfo++)
{
SStateInfo* pStateInfo = *itStateInfo;
// If a functor returns false don't continue processing
if(!functor(*pStateInfo))
{
return;
}
}
}
void SomeFunction()
{
uint8 nNumItems;
IterateStateInfo(SNumItemsFunctor(nNumItems, 3));
}
내가 위에서 언급 한 바와 같이이 VS2008와 잘 작동하지만 G ++ 컴파일하지 않습니다, 그것은 오류를 제공합니다 오류 : 노트 'IterateStateInfo (SNumItemsFunctor)'을 호출 일치 기능 : 후보는 : 나는 로컬 변수를 정의하면 무효 IterateStateInfo (IIterationFunctor &) 분명히
은은 작동하지 않습니다 :
void SomeFunction()
{
uint8 nNumItems;
SNumItemsFunctor functor(nNumItems, 3));
IterateStateInfo(functor);
}
,
하지만 G ++에서 할 수있는 방법이 있습니까 (그리고 C++ 확장을 가정합니다). 로컬 변수가 없습니까?
그게 전부입니다. 나는 최근에 이런 일이 일어났다는 것을 기억하고, 그때 내 실수를 깨달았습니다. 두 사람을 왜 연관시키지 않았는지 확신 할 수 없습니다. 감사! –
@ Doug-W : [이 정확한 문제에 대한 질문에 대답했습니다.] (http://stackoverflow.com/questions/5126608/who-is-right-and-who-is-wrong-aka-gcc-vs-visual -studio/5126624 # 5126624). 컴파일러가 이러한 에러를 잡을 수 있도록'/ W4' (바람직하게는'/ W4'와'/ WX')로 컴파일 할 것을 권장합니다. –