2012-06-03 4 views
-2

문제가 있습니다. 데이터를 저장하려는 map이 있습니다. 지도에 쌍을 추가하지만, 그걸 얻으려고하면 비슷한 데이터가 저장되지 않습니다. 내 코드 :C++지도가 작동하지 않습니다.

typedef std::map<unsigned long, int> SocketsTableType; 
SocketsTableType ClientTable; 

inline void AddClient(unsigned long id, int fd) 
{ 
    ClientTable.insert(std::pair<unsigned long, int>(id, fd)); 
} 

inline int GetDescriptorByClient(unsigned long id) 
{ 
    SocketsTableType::const_iterator it; 

    for (it = ClientTable.begin(); it != ClientTable.end(); ++it) 
    { 
     if (it->first == id) 
     { 
      return it->second; 
     } 
    } 
    return 0; 
} 

int main() 
{ 
AddClient(223322, 12); 
int fd = GetDescriptorByClient(223322); 
if(fd >= 0) 
{ 
    // NEVER HERE 
} 

} 

내 코드에 어떤 문제가 있습니까?

감사합니다.

+0

코드가 잘못되었습니다. 'addClient' 함수가 전혀 없습니다. 어떻게 컴파일 되었습니까? 아니면 .. 했어? –

+0

그리고'AddClient'에 대한 호출을'AddClient'로 바꾸면 저에게 효과적입니다. –

+0

'AddClient' 또는'addClient'가 두 곳에서 모두 사용 되었다면, 코드는 잘 동작합니다. 그러나'std :: map'은 여러분이 사용해야하는'find' 메소드를 가지고 있습니다. 그것은 더 효율적인 방법입니다. – juanchopanza

답변

2

코드에 오류가 있습니다. 그것은 심지어 컴파일되지 않습니다. 어느 곳에서나 선언 된 함수 addClient이 없습니다. 또한 필요한 헤더 파일을 포함하는 것을 잊었습니다. 음, 다음 프로그램은 매력처럼 작동합니다.

#include <map> 
#include <cstdio> 

typedef std::map<unsigned long, int> SocketsTableType; 

SocketsTableType ClientTable; 

inline void AddClient(unsigned long id, int fd) 
{ 
    ClientTable.insert(std::pair<unsigned long, int>(id, fd)); 
} 

inline int GetDescriptorByClient(unsigned long id) 
{ 
    SocketsTableType::const_iterator it; 

    for (it = ClientTable.begin(); it != ClientTable.end(); ++it) 
    { 
     if (it->first == id) 
     { 
      return it->second; 
     } 
    } 
    return 0; 
} 

int main() 
{ 
    AddClient(223322, 12); 
    int fd = GetDescriptorByClient(223322); 
    if(fd >= 0) 
    { 
     printf("Found it! FD=%d\n", fd); 
    } 
} 
관련 문제