2011-07-03 3 views
7

모두! 맵 컨테이너에 채널 데이터 그룹을 유지합니다. 개별 채널 데이터는 해당 채널 이름으로 액세스 할 수 있습니다. 이와 관련하여 간단한 함수 GetIRChannelData을 작성합니다 (다음 코드 참조). compliing 때, 문 pusIRChannelData = cit->second();는 할오류 C2064 : 용어가 0 개의 인수를 취하는 함수로 평가되지 않습니다.

error C2064: term does not evaluate to a function taking 0 arguments 

모든 기능을 읽을 오류가지도 컨테이너에 주어진 채널 이름/ID를 검색하고, 시간적 포인터 그것을 데이터 포인터를 할당하는에 불과하다 throwed 발견되면. 뭐가 잘못 됐는지 보여 주시겠습니까?

const Array2D<unsigned short>* GetIRChannelData(std::string sChannelName) const 
{ 
    const Array2D<unsigned short>* pusIRChannelData = NULL; 

    for (std::map<std::string, Array2D<unsigned short>* >::const_iterator cit = m_usIRDataPool.begin(); cit != m_usIRDataPool.end(); ++cit) 
    { 
     std::string sKey = cit->first; 

     if (sKey == sChannelName) 
     { 
      pusIRChannelData = cit->second(); // Error occurred on this line 
      break; 
     } 
    } 

    return pusIRChannelData; 
} 
+1

키를 찾는 모든 요소를 ​​루핑하는 대신'std :: map'의'find' 메소드를 사용하지 않는 특별한 이유가 있습니까? –

+0

부수적으로 별칭은 코드를보다 읽기 쉽게 만드는 데 정말로 도움이됩니다.'typedef std :: map <...> DataPool; (DataPool :: const_iterator ...'. –

답변

12

오류 메시지가 분명합니다 ... 존재하지 않는 함수를 호출했습니다. map::iteratorstd::pair을 가리키며 firstsecond의 두 멤버 개체가 있습니다. 이들은 함수가 아닙니다. 해당 라인에서 ()을 제거하면 오류가 사라집니다.

+0

그것은'std :: map' 반복자입니다, 안돼요?'first'는'std :: string'으로 선언 된 키이고,'second'는 값입니다. – geekosaur

+0

@geekosaur : 예, 처음에 루프를 잘못 읽었습니다.지도의 값 유형을 반복하고 있다고 생각했습니다. 지금 올바른지 확인하십시오. –

+0

Dennis, 저급한 실수를했습니다! – GoldenLee

3

cit->second은 함수 포인터를 식별하지 않습니다. 반복기의 정의가 (Array2D<unsigned short>)에 대한 포인터라고 주장합니다. pusIRChannelData(Array2D *)이므로 을 호출하려고 시도하는 cit->second() 대신 cit->second이 필요합니다.

관련 문제